three.js - 如何在 Three.js 中克隆包含多个网格的 Collada 对象
问题描述
我已经加载了一个包含多个网格的 .dae 模型,并尝试克隆它但失败了。以下是我使用的代码。
loader.load( 'assets/model/deck.dae', function ( collada ) {
deck = collada.scene;
console.log(deck);
window.referenceModel = deck.children[0];
refObject = window.referenceModel;
} );
var deckClone = new THREE.Mesh( refObject.geometry, refObject.material );
scene.add( deckClone );
此代码适用于包含一个网格的示例 .dae 文件,但不适用于我自己制作的另一个 .dae 文件。我制作的 .dae 文件由几个网格组组成。我会附上这些文件。这是示例 .dae 文件。 https://drive.google.com/file/d/13BCp6avslnpb1O8Q6xCqjE-ueojgz1AD/view 这是我自己制作的 .dae 文件。 https://drive.google.com/file/d/1BTIMs0IHHqrixvj45NXcZoh1PhEnm2Qr/view
我想知道如何从第二个 .dae 文件中克隆对象,或者如何将第二个文件转换为具有相同结构(一个网格)文件的 .dae 文件。
解决方案
当您这样做时,您只针对场景的一个孩子,deck.children[0]
当然它只会克隆那个网格。
尝试文档中提到.clone()
的方法,它将遍历其所有后代并为您克隆它们。
loader.load( 'assets/model/deck.dae', function ( collada ) {
deck = collada.scene;
var deckClone = deck.clone(true);
scene.add(deckClone);
} );
此外,您在 .load() 回调函数deckClone
之外添加,这意味着它将在 .dae 文件加载之前执行,这样您就会遇到错误和问题。确保将克隆的对象添加到回调函数内的场景中。
推荐阅读
- android - 在图像周围绘制坐标并计算顶点位置 Android
- visual-studio - 抑制单个编译器错误(例如 NU1603)
- php - 使用 PHP 项目关键字解析 XML
- c# - ModelBinder 的文化默认行为问题
- format - matlab coder - 在创建的 C 代码中更改格式
- python - Python 正则表达式中的 Re.search 无法按预期工作
- r - 用户定义的函数在 R 中没有响应
- apache - Apache 使用的 LDAP 过滤器始终不返回任何条目
- c# - char 数组返回值,如 50'w'
- mysql - MySQL - 从 2 个表中选择,其中结果中的几列应基于条件语句