我试图在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:对不起我的英语......
答案 0 :(得分:2)
(主要)问题:当您使用Blender并且创建动画时,它会自动为动画创建名称,您可以在动作编辑器上更改名称。现在可以为网格导出多个动画。在javascript代码中,您可以通过id(geometry.animations [id])调用每个动画。