computeVertexNormals

use*_*306 6 three.js

我使用3d修饰符https://github.com/foo123/MOD3来弯曲立方体.更新几何体(更改顶点位置)后,灯光不会更新,立方体仍然显示为没有任何更改.所以我试过了

cube.geometry.computeVertexNormals()

cube.geometry.computeFaceNormals()

但之后,立方体不再像立方体一样呈现,而是像"丑陋的球体":

在此输入图像描述

左边是阴影computeVertexNormals(),右边是原始阴影.

几何变化后如何更新着色?

Wes*_*ley 14

如果使用MOD3仅修改几何体,那么您将不得不自己更新法线.

geometry.computeVertexNormals();
Run Code Online (Sandbox Code Playgroud)

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

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

three.js r.85

  • 我现在明白了这个问题.computeVertexNormals()方法不检查面是否在平面上,它总是计算平均值.如果我们有一个立方体几何体1x1x1,它将被阴影像一个球体,因为顶点法线将是平均值而不是面法线. (3认同)