如何在OBJMTLLoader加载的场景中修改对象的参数?

时间:2015-10-26 11:28:08

标签: javascript three.js mesh dat.gui

我有一个包含3个立方体和DAT.GUI菜单的场景,我只想在菜单上选中(分开)时将任何立方体设置为线框。

我为3个立方体中的2个做了什么,但我不知道为什么,第一个立方体没有被修改,你可以在这里看到这个例子:

Link to Example

以下是主要代码:

var loader = new THREE.OBJMTLLoader( manager );

    loader.load( '/pruebas/models/cubosMateriales.obj', "/pruebas/models/textures/cubosMateriales.mtl", function(object){

        contenido = object;
        contenido.position.set(0,0,0);
        contenido.position.y = -80;
        contenido.name = "cubes";

        scene.add(contenido);
        console.log(contenido);

        return contenido;
    })

    renderer.setSize( window.innerWidth, window.innerHeight );
    canvas.appendChild( renderer.domElement );

    window.addEventListener( 'resize', onWindowResize, false );
}

function animate()
{

    requestAnimationFrame( animate );
    controls.update();

    if(contenido != undefined){             
        contenido.traverse( function( object ) {            
                    if( object.material ) {
                        object.material.opacity = opciones.Opacidad;
                        object.material.transparent = true;

                        contenido.getObjectByName("Box001").material.wireframe=opciones.cube_1;
                        contenido.getObjectByName("Box002").material.wireframe=opciones.cube_2;
                        contenido.getObjectByName("Box003").material.wireframe=opciones.cube_3;     
                   }
        })
    }
    render();
}

如果你看看DOM树,这是为3个立方体创建的结构。

tree

立方体位于1,3和5位置。其余的位置包含一些不明确的混乱(哈哈,得到它?网格......好吧......忘了吧。)

有人可以帮我确定问题吗?为什么我无法访问第一个多维数据集,以及没有名称创建的网格是什么?

1 个答案:

答案 0 :(得分:2)

虽然现在不推荐使用OBJMTLLoader,但如果使用OBJLoader + MTLLoader,结果是相同的。 这里的问题是在OBJ中共享相同材料的对象(具有在3DS Max中分配的相同材料的对象)继承Three.js中的该属性,无论DOM树说什么,每个材质都分配给他的几何体,并且当您尝试通过修改具体的孩子来改变一个时,修改了所有具有该材料的孩子

解决方案是在3DS Max中为每个对象分配不同的材质,然后将其导出到OBJ + MTL