首先要明白,顶点法线存在的原因:确定灯光照射到物体表面的角度。所以一提到顶点法线,肯定要进行与灯光相关的运算了。
下面是顶点法线的计算方式
假如 A、B、C三个顶点构成一个三角形,它们对应的顶点法线分别是 n_A、n_B、n_C。
从三角形中计算出两个向量(注意是有方向的):
u = B - A v = C- A
那么对应的面法线(向量的叉乘运算) n = u x v
如果直接用面法线表示顶点法线的话,那么 n_A = n_B = n_C = n
但是对于一些曲面物体,直接用面法线表示顶点法线,显然是不合适的(不够平滑),为了达到更好的效果,我们可以用共享该顶点的所有三角形的面法线的平均值来表示该顶点的顶点法线(有点绕,哈哈哈)。
我们知道,3D建模的时候,物体一般都是由三角形构成的,所以,正常情况一个顶点是被3个三角形共享的。
假如共享某个顶点的三个三角形的面法线分别为 n1, n2,n3,
那么按照法则,该顶点的顶点法线(n)可以表示为 n = (n1 + n2 + n3) / 3