如何修改我的场景中使用 OBJMTLLoader 加载的对象的参数?
How can I modify parameters of Objects in my scene loaded with OBJMTLLoader?
我有一个包含 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位置的位置。其余位置包含一些不明的乱七八糟的东西(哈哈,明白了吗?网格....好吧...算了)。
有人可以帮我找出问题所在吗?为什么我无法访问第一个立方体,创建的所有没有名称的网格是什么?
虽然 OBJMTLLoader 现在已被弃用,但如果使用 OBJLoader + MTLLoader,结果是相同的。
这里的问题是在 OBJ 中共享相同 material 的 objects(在 3DS Max 中分配相同 material 的 objects 继承 属性在 Three.js 中,无论 DOM 树怎么说,每个 material 都分配给了他的几何体,当您尝试通过修改具体的 child 来仅更改一个时,所有children和那个material都修改。
解决方法是给3DS Max中的每个object分配一个不同的material,然后导出到OBJ + MTL
我有一个包含 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位置的位置。其余位置包含一些不明的乱七八糟的东西(哈哈,明白了吗?网格....好吧...算了)。
有人可以帮我找出问题所在吗?为什么我无法访问第一个立方体,创建的所有没有名称的网格是什么?
虽然 OBJMTLLoader 现在已被弃用,但如果使用 OBJLoader + MTLLoader,结果是相同的。 这里的问题是在 OBJ 中共享相同 material 的 objects(在 3DS Max 中分配相同 material 的 objects 继承 属性在 Three.js 中,无论 DOM 树怎么说,每个 material 都分配给了他的几何体,当您尝试通过修改具体的 child 来仅更改一个时,所有children和那个material都修改。
解决方法是给3DS Max中的每个object分配一个不同的material,然后导出到OBJ + MTL