因为要计算normal,了解这两种法线是必不可少的。在网上看到一篇讲这两种normals的文章,但是是纯英文写的:
Face Normals & Vertex Normals(面法线跟顶点法线的区别)
这里把它翻译一下,也算是学习的过程,方便阅读。
正文
什么是面法线?
面法线是描述多边形所面对方向的向量(见图 1)
什么是顶点法线?
顶点法线与面法线有一定的关系,在“如何计算面法线和顶点法线?”中讨论会讨论二者的关系。 有时我们可以将顶点法线设置为与面法线相同,但是使用面法线作为顶点法线在使用三角形近似曲面时会产生不平滑的结果。
顶点法线的作用:
Direct3D 或 Opengl 需要知道顶点法线,用来确定光线照射到表面的角度,并且由于光照计算是针对每个顶点进行的,因此 Direct3D 或 Opengl 需要知道每个顶点的表面方向(法线)。
如何计算面法线和顶点法线?
对于立方体和球体等简单的物体,我们可以通过观察看到顶点法线。 对于更复杂的网格,我们需要更机械的方法。 假设一个三角形由顶点 po、p1 和 p2 组成,我们需要计算每个顶点 n0、n1 和 n2 的顶点法线。
首先计算位于三角形上的两个向量:
求得面法线:
由于每个顶点法线与面法线相同:
找到顶点法线的更好方法是计算平均法线: 为了找到顶点 v 的顶点法线 vn,我们找到共享顶点 v 的网格中所有三角形的面法线。然后通过平均所有这些面法线给出 vn。 这里有一个例子来说明。 假设三个三角形,其面法线由 n0,n1 和 n2 给出,共享顶点 v。然后通过平均面部法线给出 vn:
在转换阶段,顶点法线可能会变为非法线(啥意思?)。 因此,最好是在转换阶段之后重新归一化所有法线。
两种不同类型的顶点向量:
顶点法线可以与面法线相同(见图5)。当我们将顶点法线设置为与面法线相同时,一个蓝色立方体将如下图所示,当我们直接面对它时,每个面都有它的最大亮度。
当我们将顶点法线设置为三个面法线的平均值时,当我们旋转立方体时,角度将具有最大亮度。