1

我有两个 collada 文件(两个不同的场景:“01.dae”和“02.dae”)。我想在动画结束后首先显示 01.dae 我想在同一画布上加载并显示 02.dae。(我正在尝试修改“webgl_loader_collada_keyframe.html”来做到这一点,但到目前为止没有结果。)

我如何处理多个动画 collada 场景?源代码或任何提示或技巧将不胜感激!


谢谢您的回答。我根据您的 idae 修改了我的代码,但不幸的是它不起作用。你能看看我的代码吗?

这是我的代码:

    loader.load( 'pump.dae', function ( collada ) {


        model = collada.scene;
        animations = collada.animations;
        kfAnimationsLength = animations.length;
        model.scale.x = model.scale.y = model.scale.z = 0.125; // 1/8 scale, modeled in cm

        init();
        start();
        animate( lastTimestamp );
        setTimeout(loadSecond,3000);                
    } );


    function loadSecond()
    {           
    loader2.load( 'pump2.dae', function ( collada2 ) 
    {

        scene.remove( model );              
        model2 = collada2.scene;
        animations2 = collada2.animations;
        kfAnimationsLength2 = animations2.length;
        model2.scale.x = model2.scale.y = model2.scale.z = 0.125; // 1/8 scale, modeled in cm

        init2();
        start2();
        animate2( lastTimestamp2 );

        //alert("second loaded");

    } );
    }

...

如您所见,我使用

场景.删除(模型);

删除之前的场景。

第一个场景显示然后消失,但是新的场景没有加载。你有科为什么?

(注:我不知道我的第一个场景到底有多长。)

4

1 回答 1

0

如果您知道动画有多长,您可以使用 setTimeout 来加载第二个模型。

var loader = new THREE.ColladaLoader();
loader.options.convertUpAxis = true;
loader.load('PATH TO MODEL', function colladaReady( collada){
    dae = collada.scene;
    skin = collada.skins[ 0 ];              
    dae.scale.x = dae.scale.y = dae.scale.z = 1;
    dae.updateMatrix();
    scene.add(dae);    
    render(); 
    setTimeout(loadSecond,3000);
});

function loadSecond(){
    var loader = new THREE.ColladaLoader();
    loader.options.convertUpAxis = true;
    loader.load('PATH TO MODEL', function colladaReady( collada){
        ///repeat model loading logic
}

setTimeout 中的时间间隔等于动画的长度。

于 2012-08-07T19:49:28.037 回答