三个js访问obj文件中包含的对象

时间:2014-10-20 09:47:12

标签: javascript

我需要加载一个obj文件,并在第二时刻将不同的材质应用到obj文件中包含的部分。

我使用在三个例子中找到的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它似乎代码它应该返回不同对象中模型的各个部分,但是它在三行的第185行给出了一个错误.min.js“undefined不是函数”。

有人可以帮帮我吗?我实在无法解决。

谢谢

1 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了问题,所以如果这不是您正在寻找的答案,请告诉我。

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

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++;
    }
} );

});