计算顶点法线

8
我正在使用3D修改器https://github.com/foo123/MOD3来弯曲一个立方体。在几何体更新后(顶点位置被改变),灯光没有更新,因此立方体的阴影仍然与之前一样。所以我尝试了cube.geometry.computeVertexNormals()cube.geometry.computeFaceNormals(),但是这样做之后,立方体不再呈现为立方体,而是像一个“难看的球体”:enter image description here。左边是使用computeVertexNormals()之后的阴影,右边是原始阴影。如何在几何体更改后更新阴影呢?
1个回答

16
如果你使用MOD3仅修改几何结构,那么你需要自己更新法线向量。
geometry.computeVertexNormals();

每个新的顶点法线将是共享该顶点的相邻面的面法线之和的归一化结果。

如果您不喜欢three.js的方式,您唯一的选择是自己修改顶点法线。

three.js r.85


即使我不修改几何形状,如果我执行geometry.computeFaceNormals(); geometry.computeVertexNormals();,结果将与屏幕截图(左侧)中的相同。我不理解的是法线如何最初正确,但在执行geometry.computeFaceNormals(); geometry.computeVertexNormals();之后,它们变成了“丑陋的球体”样式。 - user1800306
3
我现在明白这个问题了。computeVertexNormals()方法没有检查一个面是否在平面上,它总是计算平均值。如果我们有一个1x1x1的立方体几何体,它将被着色成像一个球体,因为顶点法线是平均值而不是面法线。 - user1800306
没错,就像我解释的那样。记得点击勾选标志来“接受”这个答案。 - WestLangley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接