从眼睛/相机矢量和表面法线计算半矢量

时间:2013-06-19 20:30:20

标签: python api opengl maya

是否有任何公式可以计算给定眼睛/相机矢量和物体表面法线/位置的半矢量。

这是我能说明我的意思的最好例子:

Diagram

我的最终目标是根据这两个值计算正确的光矢量。 (相机矢量和表面法线)。

2 个答案:

答案 0 :(得分:3)

您不能单独从曲面法线和凸轮矢量导出光矢量 - 如果您考虑一下,这意味着每个独特的法线和相机组合都会导致不同的光线位置。但是你可以轻松地推导它

light_vect = light_position - face_center_position
cam_vect = cam_position - face_center_position
halfangle_vect = (light_vect.normal() + cam_vect.normal()).normal()

其中light_position,face_center_position和cam_position都是OpenMaya.MVectors

答案 1 :(得分:0)

我认为你想要实现镜面反射:那么实际上你想要计算眼睛方向和光线方向之间的半角矢量,然后将标量乘以法线并提高到某个幂。

确定半角矢量的一般公式是

H(a,b) = normalize(normalize(a) + normalize(b))

,其中

normalize(v) = v/len(v)