ジオメトリを頂点と面のセットとして定義することにより、独自のメッシュ(THREE.js、CanvasRendererを使用)を作成したいと思います。
geometry = new THREE.Geometry();
...
geometry.vertices.push(new THREE.Vector3(0, 0, 0));
geometry.vertices.push(new THREE.Vector3(1, 0, 0));
geometry.vertices.push(new THREE.Vector3(2, 0, 0));
...
...
geometry.faces.push(new THREE.Face3(1, 4, 3));
geometry.faces.push(new THREE.Face3(1, 2, 4));
geometry.faces.push(new THREE.Face3(3, 4, 5));
...
geometry.computeFaceNormals();
メッシュの色面を変えたいので、一連のマテリアルを生成します。いくつかのチュートリアルで読んだように、私はこの配列をgeometry.materialsと呼びます。
geometry.materials = [
new THREE.MeshBasicMaterial({ color: 0xFF00A0 }),
new THREE.MeshBasicMaterial({ color: 0x00FF00 }),
new THREE.MeshBasicMaterial({ color: 0x0000FF }),
...
];
次に、インデックスをgeometry.faces[i].materialIndexに割り当てます。
geometry.faces[0].materialIndex = 0;
geometry.faces[1].materialIndex = 2;
geometry.faces[2].materialIndex = 1;
...
最後に、メッシュを生成してシーンに追加します。
mesh = new THREE.Mesh(geometry, new THREE.MeshFaceMaterial());
scene.add(mesh);
まあ、このコードは機能していません。私が得るのは目に見えないメッシュだけです(顔は見えません)。私の質問は次のとおりです。
- 'geometry.materials'は、マテリアル配列を定義するためのデフォルトの変数名ですか?faces [i] .materialIndexの値はどの配列を参照していますか?
- コードが機能しないのはなぜですか?