0

在文档THREE.BufferGeometry中写道:

normal (itemSize: 3)
存储此几何中每个顶点的面或顶点法线向量的 x、y 和 z 分量。由 .fromGeometry() 设置。

这个变量什么时候保存顶点法线,什么时候保存法线?

是否像使用 a 一样简单,THREE.MeshMaterial法线被解释为面法线,而当使用 a 时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仍然持有正常属性的?此信息是否仍用于渲染,或者将它们从缓冲区几何图形中删除是一种可能的优化?

4

1 回答 1

1

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

当您转换THREE.BoxGeometry默认计算的法线时,即使在转换输出中它们也会保持设置BufferGeometry,因为几何图形无法“知道”您是否需要法线或任何属性(材质程序决定使用哪些属性)

你可以删除法线geometry.removeAttribute("normal")

于 2016-06-18T09:52:58.427 回答