私が理解している限り、次を使用してメッシュの各頂点の UV 座標 (「テクセル」) にアクセスできます。
geometry.faceVertexUvs[ materialIndex ][ faceIndex ][ vertexIndex ]
私が苦労しているのは、 が とはvertexIndex
異なるマッピング順序に従っているように見えることです
geometry.vertices[ vertexIndex ]
この問題を示す例を作成しました: http://andrewray.me/stuff/test-uv2.html
ソース: http://andrewray.me/stuff/uv2.js
上記のコードは次のことを行います。
- 平面を作成します
1
ユーティリティdot
関数を使用して、インデックスの平面の頂点の位置に球を描画します。dot( floor.localToWorld( floor.geometry.vertices[1].clone() ) );
テクセルを変更して、テクセルが
faceVertexUvs[0][0][1]
どこにあるかを確認できるようにします1
floor.geometry.faceVertexUvs[0][0][1].add( new THREE.Vector2( 0.4, 0 ) );
例のページを見るとわかるように、球体はプレーンの右上 (頂点 1 の位置) に描かれていますが、変更されているテクセルはプレーンの左下にあります。頂点のインデックスが揃っていません! これは three.js のバグですか、それともテクセルに関する何かが欠けていますか?
頂点が次のようにマッピングされているように見えることがわかりました。
texel index | vertex index
0 | 3
1 | 1
2 | 0
3 | 2
ただし、関連する UV マッピング タスクを実行しようとしているときに、他の予期しない動作が見られるため、マッピングがエラーの原因であるかどうかはわかりません。