一个obj文件中包含三个js Access对象

Three js Access objects contained in an obj file

本文关键字:js Access 对象 包含三 obj 文件 一个      更新时间:2023-09-26

我需要加载一个obj文件,并在一瞬间将不同的材质应用于obj文件中包含的零件。

我使用我在三个js示例中找到的OBJLoader加载带有此代码的OBJ文件:

var loader = new THREE.OBJLoader( manager );
loader.load( '../includes/open.obj', function ( object ) {
    console.log(object);
    object.name = "object_name";
    object.traverse( function ( child ) {
        if ( child instanceof THREE.Mesh ) {
            child.geometry.computeVertexNormals();
        }
    } );
    scene.add( object );
} );

我可以为整个obj模型指定一种材质,但不能为模型的各个部分指定不同的材质。

我试着在控制台中检查对象结构,但结果只有一个子对象。

查看OBJLoader2,它似乎应该返回不同对象中的模型部分,但它在three.min.js的第185行给了我一个错误"undefined不是函数"。

有人能帮我吗?我真的解决不了。

感谢

不确定我是否正确理解了这个问题,所以如果这不是你想要的答案,请告诉我。

请修改每个孩子的材质属性。

var childCounter = 0;
var loader = new THREE.OBJLoader( manager );
loader.load( '../includes/open.obj', function ( object ) {
    console.log(object);
    object.name = "object_name";
    object.traverse( function ( child ) {
    if ( child instanceof THREE.Mesh ) {
        if(childCounter == 0) {
            child.material = new THREE.MeshLambertMaterial( { color: 0x00ff00, shading: THREE.FlatShading} );
        }
        else {
            child.material = new THREE.MeshLambertMaterial( { color: 0x0000ff, shading: THREE.FlatShading, transparent: true, opacity: 0.5} );
        }
        child.geometry.computeVertexNormals();
        scene.add(child);
        childCounter++;
    }
} );

});