如何在Three.js中克隆包括多个网格物体的Collada对象

时间:2018-10-31 09:43:09

标签: three.js collada sketchup

我已经加载了一个包含多个网格物体的.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文件转换为具有相同结构(一个网格)文件的.dae文件。

1 个答案:

答案 0 :(得分:0)

执行deck.children[0]时,您只将场景的一个子对象作为目标,因此当然只会克隆一个网格。

尝试使用.clone()方法as mentioned in the docs,该方法将遍历其所有后代并为您克隆它们。

loader.load( 'assets/model/deck.dae', function ( collada ) {
    deck = collada.scene;
    var deckClone = deck.clone(true);
    scene.add(deckClone);
} );

此外,您还添加了deckClone 外部 .load()回调函数,这意味着将在之前加载.dae文件之前执行,这样您就会遇到错误和问题。确保将克隆的对象添加到回调函数中的场景中。