Three.js将地图分配给object.children [0]会更改整个对象的地图

时间:2016-04-01 12:05:54

标签: javascript three.js textures

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

1 个答案:

答案 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