【问题标题】:THREE.BufferGeometry - vertex normals and face normalsTHREE.BufferGeometry - 顶点法线和面法线
【发布时间】:2016-02-04 15:20:53
【问题描述】:

THREE.BufferGeometry 的文档中写道:

正常(itemSize:3)
存储此几何中每个顶点的面或顶点法线向量的 x、y 和 z 分量。由 .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 制成仍然具有正常属性?此信息是否仍用于渲染,或者将它们从缓冲区几何图形中删除是否是一种可能的优化?

【问题讨论】:

  • 缓冲区几何没有“面法线”,只有顶点法线,三角形面上的点法线由 gpu 从其顶点插值...不知道您不想要它们,您可以在之后删除它们或创建自己的 BoxGeometry 如果您的着色器不使用它们(尝试观察控制台以获取警告或阅读着色器代码),自动删除它们会出现问题,因为您可以使用另一个对象中的几何图形与其他材料等
  • @DerteTrdelnik 你能把它作为答案发布吗?然后我可以关闭问题。

标签: three.js vertex normals buffer-geometry face


【解决方案1】:

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

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

您可以使用 geometry.removeAttribute("normal") 删除法线

【讨论】:

    猜你喜欢
    • 2012-11-21
    • 1970-01-01
    • 2021-12-19
    • 2013-08-14
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    相关资源
    最近更新 更多