THREE.BufferGeometry - 顶点法线和面法线

THREE.BufferGeometry - vertex normals and face normals

THREE.BufferGeometry 的文档中写道:

normal (itemSize: 3)
Stores the x, y, and z components of the face or vertex normal vector of each vertex in this geometry. Set by .fromGeometry().

这个变量什么时候持有 vertex 法线,什么时候持有 face 法线?

是否像使用 THREE.MeshMaterial 时法线被解释为面法线一样简单,而当使用 THREE.LineMaterial 时法线被用作顶点法线?还是比那个更复杂。

我还了解到 THREE.FlatShading 可用于渲染具有平面阴影的网格(面法线直接向外指向)。

geometry = new THREE.BoxGeometry( 1000, 1000, 1000 );

material = new THREE.MeshPhongMaterial({ 
    color: 0xff0000, 
    shading: THREE.FlatShading
});

mesh = new THREE.Mesh( geometry, material );

我会说不再需要法线了。为什么我的缓冲区几何形状由 THREE.BoxGeometry 制成,在这种情况下仍然保持正常属性?此信息是否仍用于渲染,或者将它们从缓冲区几何体中移除是否是一种可能的优化?

BufferGeometry 法线是矢量法线,着色器从属于该面(在大多数情况下为三角形)的顶点为每个片段插入法线值

当您转换默认计算法线的 THREE.BoxGeometry 时,即使在 BufferGeometry 转换输出中它们也会保持设置,因为几何体无法 "know" 无论您是需要法线或任何属性(material 程序决定使用什么属性)

您可以使用 geometry.removeAttribute("normal")

删除法线