[英]Matlab calculate reflection of Vector
我必须计算图像的镜面高光(phong)。 给出了法线向量和“光向量”。 现在我必须计算光反射-是否有一个有效的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
具有相同的长度 这产生了三个方程:
处理完这些方程式后,您将获得一个3x3方程式系统。 剩下的就是解决它。
编辑我的同事刚刚告诉我一个更简单的方法:
V
可以分为2部分, V = Vp + Vn
Vp
平行于N
Vn
与N
成直角 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.