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

だから私はただ疑問に思っています、これは意図したとおりに機能していますか? 頂点法線を計算する前に、まずジオメトリのすべての変換を行う必要がありますか?

4

1 に答える 1

4

three.js は、オブジェクト マトリックスでの反射をサポートしていません。負の倍率を設定すると、オブジェクトのジオメトリが反映されます。

このようなマトリックスをジオメトリに直接適用することは自由ですが、もちろん、それはあなたがしていることです。

ただし、これにより多くの望ましくない結果が生じます。そのうちの 1 つは、ジオメトリ フェースのワインディング順序が反時計回りではなく、時計回りになることです。また、 によって計算されるように、面の法線が逆になりgeometry.computeFaceNormals()ます。

ライブラリの内部構造に精通していない限り、これを行うことはお勧めしません。

three.js r.58

于 2013-05-09T19:48:18.860 に答える