【问题标题】:Animation in THREE JS三个 JS 中的动画
【发布时间】:2016-01-29 18:30:25
【问题描述】:

有一个带有动画的模型。在引入新的动画系统后,我没有让它运行。也许我设置导出错误?我正在附加文件:

https://www.sendspace.com/file/etv0sl

代码:

var mixer = new THREE.AnimationMixer( player );
mixer.addAction( new THREE.AnimationAction( player.geometry.animations[0] ) );

mixer.update( 1000 );

【问题讨论】:

  • 我也在尝试寻找解决方案,但似乎三个 JS 缺少 api.. :(
  • @Sergei Ivankov 如果您认为这是解决方案,请标记我的答案?我很年轻,我需要代表 :))

标签: javascript three.js blender


【解决方案1】:

新系统适用于动画剪辑(如果我是正确的,从 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 的导出有很多可能的陷阱,尤其是当 使用骨架网格动画 (!= morphs)。

  • 所有骨骼/骨架/网格的比例值应该正好是“1”并且 永远不会再被触摸:)
    (关键帧也应该只有键控集 LocRot)
  • 导出时的“应用修饰符”按钮总是让我变形
  • 导出时只选择网格(不是骨架或骨骼)

我的导出设置:

希望对未来的探索者有所帮助:)

【讨论】:

  • 经过这么多年,这仍然是痛苦。我设法用 3 个动画动作制作了简单的模型,但是每当我尝试在一个动作中采用所有动画的现有模型时 - 这总是出错。
【解决方案2】:

这个:

if(typeof mixer != "undefined") mixer.update(delta);

应该是这个

if(typeof mixer !== "undefined") mixer.update(delta);

【讨论】:

    猜你喜欢
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    相关资源
    最近更新 更多