簡體   English   中英

threejs帶有對象材質的線框

[英]threejs wireframe with the object materials

我想獲取從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文檔中那樣使用各種Material,但是它們都不給我默認對象材質的結果

我通過為材料添加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; 而且效果很好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM