带有物体材质的三维线框

threejs wireframe with the object materials

本文关键字:三维 线框      更新时间:2023-09-26

我想获得从OBJMTLLoder加载的对象的线框,所以这里我有下面的代码

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文档中一样使用各种材料,但它们都没有给我一个默认对象材料

的结果

我通过add child修复了它。材料的材料,所以这是答案

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;一样,它工作得很好