2016-04-01 12 views
0

Çalışmakta olan bir nesne dosyasında OBJLoader ile yüklenen her nesneye harita atamaya çalışıyorum. Sorun şu ki, başka bir haritayı o dosyadan sadece bir nesneye atamaya ve geri kalanını bir önceki haritayla tutmaya çalışıyorum. Her nesne için haritayı değiştirir. ben sadece object.children için travers koşmak bileThree.js Haritası atama object.children [0] tüm nesnenin haritasını değiştirir

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); 
}); } 

[0] ve orada haritayı atamak, sonuç aynıdır. Neyi yanlış yapıyorum?

cevap

1

Bir malzemenin bir özelliğini değiştirirseniz, bu değişiklik, söz konusu materyali paylaşan tüm yenilenebilir nesnelerde görünecektir. Muhtemelen senin durumunda ne olduğu belli.

kullanın bu model: güzel çalışma

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

sayesinde. Sadece kendi neslimin kendi malzemesine sahip olduğunu düşündüm ve malzemeye sahip olduğumu ve onu nesneye atadığımı düşünmedim. – Ryder

İlgili konular