我正在尝试创建一个可以翻转Three.js场景中任何对象的实用程序.翻转本身很容易:
object3D.applyMatrix(new THREE.Matrix4().makeScale(-1, 1, 1));
Run Code Online (Sandbox Code Playgroud)
事实证明困难的是在翻转后修复面部和法线.结果看起来很混乱.源和翻转对象的图像:https://dl.dropboxusercontent.com/u/20925853/Flipped.png
我已经看到了许多线程,其中讨论了这个和类似的问题,但没有找到任何可用的东西.有人知道我在那里失踪了吗?- 谢谢!
关于Js小提琴的示例代码:https: //jsfiddle.net/7dwh084w/
object3D.applyMatrix(new THREE.Matrix4().makeScale(-1, 1, 1));
Run Code Online (Sandbox Code Playgroud) 我在 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)
所以我只是想知道,这是否按预期工作?在计算顶点法线之前,是否需要首先对几何体进行所有变换?