首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Threejs:如何使用Draco压缩器导出导入的obj

Threejs:如何使用Draco压缩器导出导入的obj
EN

Stack Overflow用户
提问于 2020-07-03 21:09:15
回答 1查看 194关注 0票数 1

我只有有限的javascript技能,我可以让基本的东西在三个in中工作。现在,我正在与draco导出器进行斗争。

@ Threejs.org有一个example of the Draco exporter

此示例使用生成的网格,并且工作正常:

代码语言:javascript
复制
// export mesh

            var geometry = new THREE.TorusKnotBufferGeometry( 50, 15, 200, 30 );
            var material = new THREE.MeshPhongMaterial( { color: 0x00ff00 } );
            mesh = new THREE.Mesh( geometry, material );
            mesh.castShadow = true;
            mesh.position.y = 25;
            scene.add( mesh );

我可以导入.obj,这也很好用

代码语言:javascript
复制
new OBJLoader()
.setPath( '../models/mymodel/' )
.load( 'mymodel.obj', function ( mesh ) {

    mesh.traverse( function ( child ) {

        if(child.name=='mymodel_part1'){                        
                    child.material = Material1;
        }
        if(child.name=='mymodel_part2'){                        
                    child.material = Material2;
        }
        if(child.name=='mymodel_part3'){                        
                    child.material = Material3;
        }

    } );

    scene.add( mesh );

} );

现在我想导出网格,但是这不起作用,我得到一个"TypeError: mesh is undefined“。

所以类型是不正确的,但是它应该是什么,我该如何改变它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-03 21:48:09

问题是OBJLoader.load()不会生成THREE.Group的一个实例,而不是一个组。因此,您必须首先确定组的后代中的正确网格。但是,这取决于资源,因为OBJ文件可以包含多个网格定义。我准备了一个活生生的例子来演示这个工作流程。重要的代码部分是:

代码语言:javascript
复制
var loader = new OBJLoader();
loader.load( 'https://threejs.org/examples/models/obj/tree.obj', function ( obj ) {

    scene.add( obj );
    mesh = obj.children[ 0 ];

} );

https://jsfiddle.net/bquxjf28/2/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62716147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档