我试图在一个obj文件中为每个加载了OBJLoader的对象分配map,这个文件正在运行。问题是当我尝试将其他地图分配给该文件中的一个对象时,将其余地图保留在之前的地图上。它会更改每个对象的地图。
function loadOBJ( geometry, name ) {
loader.load( geometry, function( object ){
object.traverse( function (child) {
if ( child instanceof THREE.Mesh ) {
child.material.map = map;
child.material.envMap = textureCube;
child.castShadow = true;
child.receiveShadow = true;
child.material.needsUpdate = true;
}
});
object.children[0].material.map = new THREE.TextureLoader().load("img/ground.jpg");
object.name = name;
scene.add( object );
console.log(object.name);
}); }
即使我只为object.children [0]运行遍历并在那里分配地图,结果也是一样的。我做错了什么?
答案 0 :(得分:1)
如果更改材质的属性,则该更改将显示在共享该材质的所有可渲染对象上。这很可能是你的情况。
使用此模式:
newMaterial = object.children[ 0 ].material.clone();
newMaterial.map = new THREE.TextureLoader().load( "img/ground.jpg" );
object.children[ 0 ].material = newMaterial;
three.js r.75