2016-04-01 60 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