0

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

我所做的适用于我的 3 个立方体中的 2 个,但我不知道为什么,第一个立方体没有被修改,你可以在这里查看示例:

链接到示例

这是主要代码:

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 个立方体创建的结构。

树

立方体在位置 1、3 和 5 的位置。其余位置包含一些无法识别的混乱(哈哈,明白了吗?网格......好吧......算了)。

有人可以帮我找出问题吗?为什么我无法访问第一个立方体,以及创建的所有没有名称的网格是什么?

4

1 回答 1

2

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

解决方法是在3DS Max中给每个物体分配不同的材质,然后导出到OBJ + MTL

于 2016-03-10T23:56:30.677 回答