【问题标题】:Problems with MeshFaceMaterial since revision 54 (Update 2)自修订版 54(更新 2)以来 MeshFaceMaterial 的问题
【发布时间】:2012-12-28 20:03:34
【问题描述】:

由于我使用的是修订版 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

我正在将几何图形与 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])));

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

【问题讨论】:

    标签: three.js


    【解决方案1】:

    正如migration page 中详述的,自 r52 以来它现在是这样的:

    new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materialsArray ) );
    

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

    THREE.GeometryUtils.setMaterialIndex( mesh1.geometry, 0 );
    THREE.GeometryUtils.setMaterialIndex( mesh2.geometry, 1 );
    

    【讨论】:

    • 哇!这种变化极大地提高了我的应用程序的加载性能!谢谢。
    猜你喜欢
    • 2011-12-03
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 2010-10-24
    • 2010-11-15
    • 2010-12-27
    • 1970-01-01
    • 2011-11-20
    相关资源
    最近更新 更多