网格上的一半三角形异常亮起

Half of the triangles on a mesh are unusually lit

我有一个从导出的网格数据生成的网格。网格有一些大三角形,我将它们分成较小的三角形。分裂后,大约有一半的法线看起来不对。

对于我创建的每个新顶点,我还创建了一个新法线,其中包含我从正在拆分的三角形上的其他法线之一复制的数据。拆分后,我的法线数组与顶点数组的数量相同。然而,出现以下问题:

(animated version here https://i.gyazo.com/2ae87dda9bfbff16b0be421941e8bca6.gif]

我使用的是 VBO 网格样式。非常感谢任何帮助!

datenwolf 编辑以合并来自评论的信息:

启用面部剔除后的渲染结果如下所示:

您的渲染有两个问题:

  • Z格斗:(显然你的网格是"double walled")深度测试中两面墙的渲染"conflict"。这可以通过启用背面剔除来缓解 (glEnable(GL_CULL_FACE))

然而,要使背面剔除起作用,您必须解决另一个问题,即

  • 不一致的面绕组/法线方向:您的网格中似乎有一半面是顺时针指定的,另一半是逆时针指定的。自动缠绕正则化是一个太复杂的主题,无法在这种问答形式中触及。直接的建议是将网格加载到提供此功能的 3D 建模器中并在那里修复它(例如 Blender,它具有功能 "Make Normals Consistent",编辑模式下的 Ctrl+N 热键)。