javascript - Threejs:如何使用 Draco 压缩器导出导入的 obj
问题描述
我只有有限的javascript技能,我可以在threejs中获得基本的东西。现在我正在与 draco 出口商斗争。
@Threejs.org 有一个Draco 导出器的例子
此示例使用生成的网格并且运行良好:
// 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 这也可以正常工作
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”。
所以类型不正确,但它应该是什么,我该如何改变它?
解决方案
问题是它OBJLoader.load()
不会产生一个组,而是一个THREE.Group
. 因此,您必须首先确定组后代中的正确网格。然而,这取决于资产,因为OBJ
文件可以包含多个网格定义。我准备了一个演示此工作流程的实时示例。重要的代码部分是:
var loader = new OBJLoader();
loader.load( 'https://threejs.org/examples/models/obj/tree.obj', function ( obj ) {
scene.add( obj );
mesh = obj.children[ 0 ];
} );
推荐阅读
- javascript - 我的 Discord 机器人不会用我制作的 Embed 回复
- java - 返回相同返回类型的对象会产生语法错误
- powershell - 将递归运行应用于 $com.GetDetailsOf 以获取长度参数
- django - 为什么Django可以处理多个请求?
- c++ - 我想知道如何填充基类然后派生类 C++
- javascript - 为什么 PHP 部分 Javascript 不能在 PHP 部分工作,但在 Html 部分工作正常?
- python - 使python输出打印并消失?
- r - 使用 R dplyr 汇总数据
- marklogic - 使用 xdmp:lock-acquire() 函数锁定文档时出现问题
- javascript - 通过 DOM 插入 JS 播放器失败