2

画像の鏡面ハイライト(フォン)を計算する必要があります。法線ベクトルと「光ベクトル」が与えられます。ここで、光の反射を計算する必要があります-反射光ベクトルを取得するために、光ベクトルを法線ベクトルに反転させる効率的なmatlab関数はありますか?

I spec = k s * I *(r * v)p

ここ lで、は光ベクトル
nは表面の法線ベクトルです
r反射ベクトル
vは反射点から視聴者までのベクトルは
p光沢です

4

1 に答える 1

6

私はこれを数学的に解きます:

N法線ベクトルとします。V光のベクトルにしましょう。O反射ベクトルとします。

  1. Oと同じ平面にありますNV
  2. との間の角度の正弦は、Vとの間の角度の正弦とN同じです(マイナス記号付き)。VO
  3. Oと同じ長さV

これにより、次の3つの方程式が得られます。

  1. dot(O、cross(N、V))= 0
  2. dot(N、V)/ norm(N)/ norm(V)= --dot(N、O)/ norm(N)/ norm(O)
  3. norm(O)= norm(V)

これらの方程式を操作すると、3x3方程式システムに到達します。残っているのはそれを解決することだけです。


編集私の同僚はちょうど私にもっと簡単な方法を教えてくれました:

V2つの部分に分けることができます、V = Vp + Vn

  1. Vp- と並行してN
  2. 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.stackexchangehttps ://math.stackexchange.com/questions/13261/how-to-get-a-reflection-vector

于 2012-06-13T12:04:32.280 に答える