具有多个动画的网格

时间:2015-01-09 10:08:29

标签: javascript 3d three.js blender maya

我试图在Three.js中理解这个例子:http://threejs.org/examples/#webgl_animation_skinning_blending。我对这部分代码(BlendCharacter.js文件)有一些问题。

this.load = function ( url, onLoad ) {

    var scope = this;

    var loader = new THREE.JSONLoader();
    loader.load( url, function( geometry, materials ) {

        var originalMaterial = materials[ 0 ];
        originalMaterial.skinning = true;

        THREE.SkinnedMesh.call( scope, geometry, originalMaterial ); // QUESTION (2)

        // Create the animations

        for ( var i = 0; i < geometry.animations.length; ++i ) {

            var animName = geometry.animations[ i ].name; // QUESTION (1)
            scope.animations[ animName ] = new THREE.Animation( scope, geometry.animations[ i ] );

        }

        (...)

    } );
};

我有两个问题:

  • (主要)3D对象(采用Three.js格式)如何拥有名称动画?在for循环中,"geometry.animation[i].name""walk", "idle" and "run"。我用maya和blender制作了动画(初学者级别),但是我没有看到如何在同一个网格上导出多个动画,以及如何命名它们。

  • (更少)这是JavaScript语法的问题。为什么"var scope = this;"?我尝试在"scope"中将"this"替换为"THREE.SkinnedMesh.call(scope, geometry, originalMaterial);",但这使其不再有效。

感谢您阅读我的问题!

PS:对不起我的英语......

1 个答案:

答案 0 :(得分:2)

(主要)问题:当您使用Blender并且创建动画时,它会自动为动画创建名称,您可以在动作编辑器上更改名称。现在可以为网格导出多个动画。在javascript代码中,您可以通过id(geometry.animations [id])调用每个动画。