リビジョン48の代わりにリビジョン54を使用しているので、スクリプトで次の例外を取得します。
Uncaught TypeError: Cannot read property 'map' of undefined three.js:18155
bufferGuessUVType three.js:18155
initMeshBuffers three.js:17963
addObject three.js:21674
initWebGLObjects three.js:21608
render three.js:21145
...
THREE.JSONLoader.createModel three.js:9892
xhr.onreadystatechange
ジオメトリを。とマージしていTHREE.GeometryUtils.merge
ます。その後、マージされたジオメトリを使用してメッシュを作成します。このメッシュMeshFaceMaterial
では、面のマテリアルを適用するために使用します。r54以降、これは例外になります。他の素材を使用すると動作しますが、元の面の素材は使用できません。
更新:すべての面がマテリアルを指していますgeometry.faces[i].materialIndex
が、ジオメトリにはマテリアル配列が含まれていません。
更新:ジオメトリをマージしてマテリアルを保持したいだけです:)これが解決策になると思いましたmaterialIndex
が、面のはマージ時に更新されません。この例を投稿して、必要なものをなんとか説明します。
mesh1 = new THREE.Mesh(new THREE.PlaneGeometry(2,2), new THREE.MeshBasicMaterial({ color: 0xFF0000}));
mesh2 = new THREE.Mesh(new THREE.PlaneGeometry(2,2), new THREE.MeshBasicMaterial({ color: 0x0000FF}));
mesh2.position.y = 3;
THREE.GeometryUtils.merge(mergedGeo, mesh1);
THREE.GeometryUtils.merge(mergedGeo, mesh2);
scene.add(new THREE.Mesh(mergedGeo, new THREE.MeshFaceMaterial([mesh1.material, mesh2.material])));
マージされた面を適切なマテリアルにリンクする独自のロジックを実装することもできますが、以前のバージョンで機能していたため、これは少しイライラします。