каркас threejs с объектными материалами

#javascript #three.js

#javascript #three.js

Вопрос:

я хочу получить каркас объекта, из которого он загружается 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, но ни один из них не дает мне результата с материалом объекта по умолчанию

Ответ №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; , и это сработало нормально