2014-06-24 38 views
1

我想是从OBJMTLLoder加载对象的线框,所以在这里我的代码像下面threejs线框与对象材料

var loader = new THREE.OBJMTLLoader(); 
       loader.load('obj/male02/male02.obj', 'obj/male02/male02_dds.mtl', function (object) { 

        object.traverse(function (child) { 

        if (child instanceof THREE.Mesh) 
        { 
        child.geometry.computeFaceNormals(); 
        var geometry = child.geometry; 
        console.log(geometry); 
        geometry.dynamic = true; 
        material = new THREE.MeshLambertMaterial(); 
        mesh = new THREE.Mesh(geometry, material); 
        scene.add(mesh); 

        var useWireFrame = true; 
         if (useWireFrame) { 
          mesh.traverse(function (child) { 
           if (child instanceof THREE.Mesh) child.material.wireframe = true; 
          }); 
         } 

        } 

        object.position.y = - 80; 
        scene.add(object); 

        }); 

       }); 

这是工作好,我可以看到线框在我的对象上,不幸的是在这里我的对象材质改为MeshLambertMaterial。但我想获取对象的线框与加载的对象的默认材质,我可以使用各种材质作为在threejs文件,但没有一个给我的结果与默认对象材质

回答

1

我得到固定它通过添加child.material的材料,所以这里是

loader.load('obj/male02/male02.obj', 'obj/male02/male02_dds.mtl', function (object) { 

        object.traverse(function (child) { 

        if (child instanceof THREE.Mesh) 
        { 
        //child.geometry.computeFaceNormals(); 
        var geometry = child.geometry; 
        //console.log(geometry); 
        //geometry.dynamic = true; 
        material = child.material; 
        mesh = new THREE.Mesh(geometry, material); 
         scene.add(mesh); 

        var useWireFrame = true; 
         if (useWireFrame) { 
          mesh.traverse(function (child) { 
           if (child instanceof THREE.Mesh) 
           { 
           child.material.wireframe = true; 
           child.material.color = new THREE.Color(0x6893DE ); 
           } 
          }); 
         } 

        } 

        object.position.y = - 80; 
        //scene.add(object); 

        }); 

这里我补充material = child.material;geometry = child.geometry;它工作得很好

答案