纹理不会在一个几何体上显示,而是在其他几何体上显示

时间:2016-09-12 15:31:01

标签: three.js

我想在通过STLLoader加载的对象上放置纹理。然而,这不起作用,对象仍然是完全黑色的。如果我改变几何体多维数据集一切正常,我找不到我为另一个对象做错了什么。我设置了所有的UV来映射纹理,其值在0-1之间,如果我可以正确看到STL加载的几何体。为材料添加{color: 0xffff00}而不是{map: this.objs[i].texture }。 不显示纹理但显示暗几何的代码是:

var cubeGeo = new THREE.BoxGeometry( 70, 70, 70 );
res = new THREE.Mesh(this.objs[0].mesh.geometry, new THREE.MeshBasicMaterial( {map: this.objs[i].texture } ));

res.material.side = THREE.DoubleSide;
res.geometry.computeFaceNormals ();
res.geometry.uvsNeedUpdate = true;
res.geometry.buffersNeedUpdate = true;
res.material.needsUpdate=true;

scene.add(res);
render();

以下代码中只使用了已使用的几何图形,可以将纹理应用到多维数据集。

var cubeGeo = new THREE.BoxGeometry( 70, 70, 70 );
res = new THREE.Mesh(cubeGeo, new THREE.MeshBasicMaterial( {map: this.objs[i].texture } ));

res.material.side = THREE.DoubleSide;
res.geometry.computeFaceNormals ();
res.geometry.uvsNeedUpdate = true;
res.geometry.buffersNeedUpdate = true;
res.material.needsUpdate=true;

scene.add(res);
render();

所以它必须是纹理和几何的结合,因为纹理在立方体上工作得很好,几何与颜色很好地配合。有人有想法吗?

9月13日更新:当我进一步投资时,我注意到如果我在加载STL时直接进行纹理化,它就可以了。所以我认为我必须以某种方式改变几何之间的几何形状。因此,在加载时对几何体进行了克隆,并将其存储起来以便以后使用。在后期没有使用克隆 - 再次黑 - 虽然我肯定没有碰到克隆。因此,在加载几何体并进行克隆时,我尝试使用它直接工作的几何体的克隆。对于几何体的克隆,我在克隆后直接得到相同的结果 - 黑色。得到更奇怪和更奇怪的...希望某人有一个想法,因为我用完了

1 个答案:

答案 0 :(得分:0)

确定。我发现克隆不会克隆边界框,这就是克隆部分无法工作的原因。通过重新计算边界框,它可以正常工作

最后,geometry.elementsNeedUpdate = true;是缺少的部分为什么纹理没有加载。