繁体   English   中英

Matlab计算向量的反射

[英]Matlab calculate reflection of Vector

我必须计算图像的镜面高光(phong)。 给出了法线向量和“光向量”。 现在我必须计算光反射-是否有一个有效的matlab函数将光向量翻转到法线向量上以获得反射光向量?

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

其中: l是光向量
n是表面的法线向量
r是反射向量
v是从反射点到查看器的向量
p是光泽

我会用数学方法解决这个问题:

N为法线向量。 V为光向量。 O为反射向量。

  1. ONV在同一平面上
  2. VN之间的夹角的余弦与VO之间的夹角的余弦(带负号)相同。
  3. OV具有相同的长度

这产生了三个方程:

  1. 点(O,交叉(N,V))= 0
  2. 点(N,V)/规范(N)/规范(V)=-点(N,O)/规范(N)/规范(O)
  3. 范数(O)=范数(V)

处理完这些方程式后,您将获得一个3x3方程式系统。 剩下的就是解决它。


编辑我的同事刚刚告诉我一个更简单的方法:

V可以分为2部分, V = Vp + Vn

  1. Vp平行于N
  2. VnN成直角

O具有相同的平行部Vp ,但完全相反Vn

因此, O = Vp - Vn ,但是V = Vp + Vn ,然后O = V - 2 * Vn其中Vn = dot(V,N) * N (假设N范数为1)

因此,最终答案是:

 function O = FindReflected(V,N)
     N = N / norm(N);
     O = V - 2 * dot(V,N) * N;
 end

编辑2我刚刚在Math.stackexchange上找到了更好的解释: https : Math.stackexchange

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM