画像の鏡面ハイライト(フォン)を計算する必要があります。法線ベクトルと「光ベクトル」が与えられます。ここで、光の反射を計算する必要があります-反射光ベクトルを取得するために、光ベクトルを法線ベクトルに反転させる効率的なmatlab関数はありますか?
I spec = k s * I *(r * v)p
ここ
l
で、は光ベクトル
n
は表面の法線ベクトルです
r
反射ベクトル
v
は反射点から視聴者までのベクトルは
p
光沢です
画像の鏡面ハイライト(フォン)を計算する必要があります。法線ベクトルと「光ベクトル」が与えられます。ここで、光の反射を計算する必要があります-反射光ベクトルを取得するために、光ベクトルを法線ベクトルに反転させる効率的なmatlab関数はありますか?
I spec = k s * I *(r * v)p
ここ
l
で、は光ベクトル
n
は表面の法線ベクトルです
r
反射ベクトル
v
は反射点から視聴者までのベクトルは
p
光沢です
私はこれを数学的に解きます:
N
法線ベクトルとします。V
光のベクトルにしましょう。O
反射ベクトルとします。
O
と同じ平面にありますN
、V
V
との間の角度の正弦とN
同じです(マイナス記号付き)。V
O
O
と同じ長さV
これにより、次の3つの方程式が得られます。
これらの方程式を操作すると、3x3方程式システムに到達します。残っているのはそれを解決することだけです。
編集私の同僚はちょうど私にもっと簡単な方法を教えてくれました:
V
2つの部分に分けることができます、V = Vp + Vn
Vp
- と並行してN
Vn
-とまっすぐな角度を持っていますN
O
平行部分は同じVp
ですが、正反対ですVn
したがって、、O = Vp - Vn
しかしV = Vp + Vn
、そしてO = V - 2 * Vn
どこで(それが1のノルムを持っているVn = dot(V,N) * N
と仮定して)N
したがって、最終的な答えは次のとおりです。
function O = FindReflected(V,N)
N = N / norm(N);
O = V - 2 * dot(V,N) * N;
end
編集2
私はちょうどはるかに良い説明を見つけましたMath.stackexchange
:
https ://math.stackexchange.com/questions/13261/how-to-get-a-reflection-vector