在three.js中转换顶点法线

3

我在使用THREE.js时遇到了顶点法线的问题(参考版本为58)。出于各种原因,我想在设置几何体时先计算面的顶点法线,然后可以自由地进行变换、合并等操作。

虽然我知道法线取决于顶点,而顶点在应用矩阵时会被转换,但是我认为geometry.applyMatrix也可以将它们转换。然而,尽管以下代码可以正常工作:

geometry.applyMatrix(new THREE.Matrix4().makeScale(1, -1, 1));
geometry.computeFaceNormals();
geometry.computeVertexNormals();

以下操作顺序会导致反向顶点法线:
geometry.computeFaceNormals();
geometry.computeVertexNormals();
geometry.applyMatrix(new THREE.Matrix4().makeScale(1, -1, 1));

所以我想知道,这是否按照预期工作?在计算顶点法线之前,我需要先对几何体进行所有转换吗?

1个回答

4

three.js不支持在对象矩阵中进行反射。通过设置一个负比例因子,您可以反射对象的几何图形。

您可以直接将这样的矩阵应用于几何图形,当然,这就是你正在做的事情。

然而,这将导致许多不良后果之一是几何图形面将不再具有逆时针绕组顺序,而是顺时针。它还将导致由 geometry.computeFaceNormals() 计算出的反向面法线。

除非您熟悉库的内部工作原理,否则我建议不要这样做。

three.js r.58


非常感谢您的解释,这让我感到非常疯狂!不幸的是,我必须使用我所得到的模型进行工作,但我没有注意到任何其他“不良后果”。您还有什么其他想法吗? - user1421750
2
顶点法线计算、切线计算、材质面向性、光照计算等都会受到影响。面剔除和射线投射也会受到绕组顺序的影响。 - WestLangley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接