0

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

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

这是设置:

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

您可以从此处下载 .blend 和 .glTF 。

我认为导出效果很好,因为模型+动画在 Don McCurdy 的glTF viewer中工作。

代码:
我尝试过使用 Don McCurdy animation-mixer或将 Three.js 混合到 a-frame 组件中:

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行为是相同的(我想这并不奇怪,因为我只是参与其中)。

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

4

1 回答 1

2

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

您还提到了动作编辑器中的两个动作,它们将在导出期间合并,因为Khronos glTF Blender 导出器的多个动作仍在进行中。

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

于 2018-02-15T00:56:54.710 回答