自修订版54(更新2)以来MeshFaceMaterial的问题

Luc*_*ann 3 three.js

由于我使用的是版本54而不是版本48,因此我在脚本中得到了这个例外:

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
Run Code Online (Sandbox Code Playgroud)

我正在合并几何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])));
Run Code Online (Sandbox Code Playgroud)

我可以实现一个自己的逻辑来将合并的面链接到正确的材料,但这有点令人沮丧,因为它在早期版本中有效.

mrd*_*oob 10

正如r52中的迁移页面中所详述的那样现在是这样的:

new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materialsArray ) );
Run Code Online (Sandbox Code Playgroud)

编辑:合并前,需要为每个几何设置材质索引

THREE.GeometryUtils.setMaterialIndex( mesh1.geometry, 0 );
THREE.GeometryUtils.setMaterialIndex( mesh2.geometry, 1 );
Run Code Online (Sandbox Code Playgroud)