0

ジオメトリを頂点と面のセットとして定義することにより、独自のメッシュ(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);

まあ、このコードは機能していません。私が得るのは目に見えないメッシュだけです(顔は見えません)。私の質問は次のとおりです。

  1. 'geometry.materials'は、マテリアル配列を定義するためのデフォルトの変数名ですか?faces [i] .materialIndexの値はどの配列を参照していますか?
  2. コードが機能しないのはなぜですか?
4

1 に答える 1

1

チュートリアルはほとんどの場合、時代遅れです。代わりに three.js の例を調べてください。

チュートリアルを使用している場合は、必ず移行 wiki: https://github.com/mrdoob/three.js/wiki/Migrationも確認してください。

ジオメトリにはマテリアル プロパティがなくなりました。

materialsに配列を追加する代わりに、次のgeometryようにします。

mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );

three.js r.53

于 2012-12-09T23:00:04.203 に答える