我正在尝试从文件中读取顶点和面部信息并计算顶点法线。我已经阅读了很多其他答案,但我仍然不确定我理解。一致意见是顶点法线应该是周围法线法线的平均值,这在乍一看是有意义的。对于立方体,法线应该都是45度。是对的吗?因为如果以这样的方式排列三角形,即每个顶点共享3或6'面,计算结果就是这样。
问题:
如果一个立方体有一个顶点,例如4个三角形,我应该以某种方式对它们进行加权,以便法线以45度出现。或者我应该总结面部法线? OpenGL是否期望顶点法线更倾斜于具有2个三角形的面?另外,我应该在求和之前规范面部法线吗?
答案 0 :(得分:1)
现代OpenGL(版本> = 3)对法线一无所知。是你在着色器中使用它们来做阴影之类的事情。这个概念是处理法线方向和光线方向。
如果你的三角形是平的,它只需要一个法线,三角形内的每个点都是相同的。如果你想要一些“曲线”效果,你可以在每个顶点设置不同的法线,并在每个点的法线在顶点的法线之间插值时看到结果效果。
如果模型是平滑的,两个三角形之间没有可见边,那么两个并排三角形的法线可以被认为是相同的法线。
如果着色器以与读取顶点相同的方式读取法线,则必须为每个三角形提供三个法线。如果它们是相同的法线,则你有一个平面三角形,否则你会得到另一个效果。
如果模型是平滑的,那么顶点的法线应该与相邻点的法线相同。这意味着您可以从近点/三角形的法线计算加权法线。立方体不平滑,因此每个面的法线与相邻三角形无关。
答案 1 :(得分:0)
立方体不能有4个三角形的顶点。将这些东西交给3d模型,像幻觉艺术一样软,将模型导出为.obj
,使用'write surf normals'并编写obj loader(一页C代码,已发布链接)。
你会看到的三角形中的法线不一样。在它到达着色器之后,它会在所有3个顶点之间进行插值,因此最终每个片段有一个法线(smth接近像素)。