2016-04-01 30 views
0

我想分配映射到OBJLoader加载在一个OBJ文件,这是工作的每个对象。问题是当我试图将其他地图分配给该文件中的一个对象,并保留其他地图。它改变每个对象的地图。Three.js分配映射到object.children [0]更改整个对象的映射

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]运行遍历并在那里分配映射,结果也是一样的。我究竟做错了什么?

回答

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

+0

谢谢,工作不错。我只是认为我的对象有自己的材料,而不是我有材料并将其分配给对象。 – Ryder