答案 0 :(得分:6)
新系统适用于动画片段(如果我正确,则为r74)。 下面是我的Blender导出的JSON模型样本。
var mixer;
var actions = {};
var loader = new THREE.JSONLoader();
loader.load( "webgl/models/model.json", function ( geometry, materials ) {
model = new THREE.SkinnedMesh( geometry, materials, false );
for(var x=0;x<materials.length();x++) materials[x].skinning = true;
mixer = new THREE.AnimationMixer(model );
//idle
actions.idle = mixer.clipAction(geometry.animations[0]);
actions.idle.setLoop(THREE.LoopRepeat);
actions.idle.clampWhenFinished = true;
actions.idle.play();
//walk
actions.walk = mixer.clipAction(geometry.animations[1]);
actions.walk.setLoop(THREE.LoopRepeat);
actions.walk.clampWhenFinished = true;
scene.add( model );
}
每个导出的动画都存储在数组geometry.animations中。
在我的示例中,我明确知道哪个索引是哪个动画,但也很容易通过名称手动映射:(geometry.animations[x].name
)。
在动画循环中,您必须定期更新调音台
if(typeof mixer != "undefined") mixer.update(delta);
从http://yomotsu.net/blog/2015/10/31/three-r73-anim.html
获取了我的信息还有关于动画动作的关于源代码:https://github.com/mrdoob/three.js/blob/ab93512c7a44bd98e669592b3db441c04a2057f4/src/animation/AnimationAction.js
从Blender出口有很多可能的陷阱,特别是在 使用骨架网格动画(!=变形)。
希望有助于未来的探险家:)
答案 1 :(得分:0)
这个:
map
应该是这个
if(typeof mixer != "undefined") mixer.update(delta);