OpenGL顶点法线加权?

OpenGL vertex normal weighting?

我正在尝试从文件中读取顶点和面信息并计算顶点法线。我已经阅读了很多其他答案,但我仍然不确定我是否理解。共识是顶点法线应该是周围面法线的平均值,乍一看这是有道理的。对于立方体,法线应全部为 45 度。那正确吗?因为如果三角形的排列方式是每个顶点共享 3 或 6 'faces.'

,计算结果只会这样

问题:

如果一个立方体的顶点有 4 个三角形,我是否应该以某种方式对它们进行加权,以便法线以 45 度角出现。还是我应该对面部法线求和? OpenGL 是否期望顶点法线向具有 2 个三角形的面倾斜更多?另外,我应该在求和之前对面部法线进行归一化吗?

现代 OpenGL(版本 >= 3)对法线一无所知。是你在着色器中使用它们来做着色之类的事情。这个概念是处理法线方向和光线方向。

如果你的三角形是平的,它只需要一个法线,三角形内的每个点都一样。如果你想要一些 "curve" 的效果,你可以在每个顶点设置不同的法线,当每个点的法线在顶点的法线之间插值时看到结果效果。

如果你的模型是光滑的,两个三角形之间没有可见的边缘,那么两个并排三角形的法线可以认为是相同的法线。

如果您的着色器以与读取顶点相同的方式读取法线,那么您必须为每个三角形提供三个法线。如果它们是相同的法线,你有一个平面三角形,否则你会得到另一个效果。

如果您的模型是平滑的,那么顶点的法线应该与相邻点的法线相同。这意味着您根据 points/triangles 附近的法线计算加权法线。立方体不光滑,因此每个面的法线独立于相邻三角形。

立方体不能有 4 个顶点 triangles.trade 这东西到 3d modellin soft like art of illusion,将模型导出为 .obj with 'write surf normals' 并编写 obj loader(一页C 代码,link 已发布)。

三角形中的法线,你会看到它到达着色器后没有 same.And 它在所有 3 个顶点之间插值,因此每个片段有一个法线(接近像素) .