使用 Three.js ObjectLoader 使动画正确呈现

Getting animation to render correctly with Three.js ObjectLoader

我正在尝试使用来自 MakeHuman 的网格在 Three.js 中渲染动画。网格加载正确,但在动画 运行s 时变得非常扭曲。如果我添加一个 SkeletonHelper,我可以看到骨架正确地执行了动画,但是它的方向与网格不同。

加载网格时,它面朝下,骨架正面朝上。如果我在 Three.js 中旋转网格使其正面朝上,那么由于某种原因骨架会上下颠倒。我不确定这是否会导致网格变形。

这是我正在执行的步骤:

  1. MakeHuman 中制作网格。
  2. 导出为 Collada *.dae 文件。
  3. 导入 Blender。
  4. 使用 MakeWalk Blender 附加组件重定向到 BVH 动作捕捉文件。
    • 如果此时我在 Blender 中播放动画,它看起来很完美。
  5. 因为多个站点说这解决了他们的问题,所以我清除了网格和骨架上的任何位置、旋转或比例。
  6. 使用 Three.js Blender 导出器导出整个场景。
  7. 使用 ObjectLoader 加载场景和嵌入式动画。

如有任何帮助,我们将不胜感激。谢谢

更新 - 我能够(简要地)让模型大部分按预期进行动画处理(只有一点点失真)并且骨架和网格都指向同一个方向,但现在我无法重现我的成功。我相当确定(在 Blender 中)清除或应用旋转、位置和比例是造成差异的原因,但是当我再次尝试 运行 通过这些步骤时,我无法做到它了。骨架和网格不再同步。 就是问题所在,对吧?

我想我需要应用旋转和位置,但清除比例。但是,当我尝试应用该位置时,比例不再出现 "cleared"。我想我不明白 Blender 是如何工作的。清除或应用 Rot、Loc、Scale 的正确方法是什么?我 apply/clear 是在重定向到 BVH 之前还是之后?也许两者都有?我是否需要在每个网格 and/or 骨骼上执行此操作?

所以我想出了如何使它起作用,尽管我永远无法弄清楚为什么我以前的方法不起作用。

将模型导入 Blender 后(默认情况下所有网格都是 selected)清除旋转、位置和比例。 Then,如果模型朝向错误,按'n'显示Transform面板,select根大纲中的网格节点,并根据需要旋转它。然后,单击 ctrl+A 以 应用 旋转。

所以基本上,不是保留在导入过程中设置的旋转,而是清除它并应用您自己的旋转。