在three.js中转换顶点法线

时间:2013-05-09 19:08:17

标签: javascript three.js

我在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 个答案:

答案 0 :(得分:3)

three.js不支持对象矩阵中的反射。通过设置负比例因子,您将反映对象的几何形状。

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

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

除非你熟悉图书馆的内部工作,否则我建议不要这样做。

three.js r.58