画像の鏡面ハイライト(フォン)を計算する必要があります。法線ベクトルと「光ベクトル」が与えられます。ここで、光の反射を計算する必要があります-反射光ベクトルを取得するために、光ベクトルを法線ベクトルに反転させる効率的な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、VVとの間の角度の正弦とN同じです(マイナス記号付き)。VOOと同じ長さVこれにより、次の3つの方程式が得られます。
これらの方程式を操作すると、3x3方程式システムに到達します。残っているのはそれを解決することだけです。
編集私の同僚はちょうど私にもっと簡単な方法を教えてくれました:
V2つの部分に分けることができます、V = Vp + Vn
Vp- と並行してNVn-とまっすぐな角度を持っていますNO平行部分は同じ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