在THREE.BufferGeometry
的文档中写道:
普通(商品大小:3)
存储此几何图形中每个顶点的面或顶点法线矢量的 x、y 和 z 分量。由 .fromGeometry() 设置。
此变量何时保持顶点法线,何时保持面法线?
这是否像使用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
转换输出中,它们也会保持设置状态,因为几何体无法"知道"您是否需要法线或任何属性(材质程序决定使用哪些属性)
您可以使用geometry.removeAttribute("normal")
移除法线