glTF 2.0动画无效

时间:2018-02-11 19:30:34

标签: animation three.js aframe gltf

我正在尝试使用带动画的glTF 2.0模型进行一些实验。 不幸的是,当我尝试update THREE.animationMixer时,我收到了警告:

THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0

以下是设置:

模特:
我不是3D艺术家,所以我在搅拌机里制作了一个立方体+圆环 动作编辑器中还有两个动作,以两种不同的方式移动圆环。

您可以从here下载.blend和.glTF。

我认为导出工作正常,因为模型+动画正在Don McCurdy的glTF viewer中工作。

守则:
我尝试过使用Don McCurdy animation-mixer,或者将Three.js混合到一个框架组件中:

AFRAME.registerComponent("foo", {
  init: function() {
    var el = this.el;
    setTimeout(()=>{
      var model = el.getObject3D('mesh')       
      this.mixer = new THREE.AnimationMixer(model);
      var clips = model.animations || (model.geometry || {}).animations || 
      [];
      console.log(this.mixer)
      console.log(el)
      console.log(clips[0])
      const action = this.mixer.clipAction(clips[0], model);
      action.setDuration(100).setLoop(THREE.LoopRepeat).play();
      console.log(action)
    }, 2000)
  },
  tick: function (t, dt) {
    if (this.mixer && !isNaN(dt)) this.mixer.update(dt / 1000);
  }
})

这段代码基本上是Don's Loader的一部分。当我添加mixer.update部分时,应该移动的唯一对象,圆环,消失,以及提到的错误。没有任何日志记录为未定义,因此正确创建对象。此外,animation-mixer行为是相同的(我想毫不奇怪,因为我只是参与其中)。

任何可能导致问题的想法?我可能会遗漏一些东西,但我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:2)

三维贝塞尔插值在旧版本的THREE(前r87-r88左右)中被破坏,A-Frame 0.7.0仍在使用。在Blender中切换到线性插值可以解决这个问题,也可以使用A-Frame主分支。

您还在动作编辑器中提到两个动作,这些动作将在导出期间合并,因为Khronos glTF Blender导出器的多个动作为still in progress

如果这不起作用,还有另一个glTF Blender导出器可以尝试:https://github.com/Kupoman/blendergltf/