javascript - 在 three.js 中转换顶点法线

标签 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));

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

最佳答案

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

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

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

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

three.js r.58

关于javascript - 在 three.js 中转换顶点法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16469270/

相关文章:

javascript - 如何匹配我创建的列表中的国家/地区,然后在该国家/地区在列表内时采取行动? (GeoIP 重定向)

javascript - 如何获取 Angular 函数之外的变量值

three.js - 用于三个.js 的 IFC 加载器?

javascript - Three.js:全景立方体放大并过渡到不同的全景立方体

javascript - 减少 dimple.js 图表和轴之间的填充

javascript - 用户是否可以在浏览器中修改网站 JavaScript?

javascript - 如何使用 javascript 中采用 splat 参数的函数解析 json 对象?

javascript - THREE.js:将摄影机从上方更改为第一人称

html - 3D实体文件层到three.js json

javascript - Three.js socket.io 多人游戏系统