gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:33:33 25 4
gpt4 key购买 nike

由于我使用修订版 54 而不是修订版 48,我在脚本中得到了以下异常(exception):

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 来应用面的 Material 。从 r54 开始,这会导致异常。如果我使用其他 Material ,它可以工作..但是我不能使用原始面孔的 Material 。

更新:所有面都指向 Material geometry.faces[i].materialIndex,但几何图形不再包含 Material 数组。

更新:我只想合并几何图形并保留它们的 Material :)我认为这将是解决方案,但面的 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])));

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

最佳答案

migration page 中详述从 r52 开始,现在是这样的:

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

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

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

关于three.js - 自修订版 54(更新 2)以来的 MeshFaceMaterial 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14075094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com