在 Three.js 中转换顶点法线

use*_*750 4 javascript three.js

我在 THREE.js 中的顶点法线方面遇到困难。(作为参考,我使用的是修订版 58。)出于各种原因,我想在设置几何体时首先计算面顶点法线,然后可以自由地对其进行变换、合并等。

虽然我意识到法线取决于应用矩阵时变换的顶点,但我认为 Geometry.applyMatrix 也能够变换它们。然而,虽然以下工作正常:

geometry.applyMatrix(new THREE.Matrix4().makeScale(1, -1, 1));
geometry.computeFaceNormals();
geometry.computeVertexNormals();
Run Code Online (Sandbox Code Playgroud)

...以下操作顺序会产生反转的顶点法线:

geometry.computeFaceNormals();
geometry.computeVertexNormals();
geometry.applyMatrix(new THREE.Matrix4().makeScale(1, -1, 1));
Run Code Online (Sandbox Code Playgroud)

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

Wes*_*ley 5

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

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

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

我建议不要这样做,除非您熟悉图书馆的内部运作。

三.js r.58

  • 顶点法线计算会受到影响,切线计算、材质侧面度、光照计算等也会受到影响。面剔除和光线投射将受缠绕顺序的影响。 (2认同)