【问题标题】:Three.js Import Blender scene including animationsThree.js 导入 Blender 场景,包括动画
【发布时间】:2014-06-09 11:43:24
【问题描述】:

我有一个包含一堆对象的 Blender 场景。其中一些对象有骨骼动画,但大多数没有。我正在尝试将场景导入 Three.js,包括正确对象上的动画。以下是我遇到的问题的细分:

  • Three.js 中的骨骼动画仅在使用 THREE.SkinnedMesh 时有效。
  • 由于动画数据位于所有对象上,很难(如果不是不可能的话)确定动画链接到哪个对象,因此无法将这些网格加载为 THREE.SkinnedMesh。
  • 即使可以确定动画所属的对象,THREE.SceneLoader 本身也不会将它们变成蒙皮网格,导致必须删除 SceneLoader 制作的那些对象并使用蒙皮网格重新手动创建它们。

我尝试通过手动从 Blender 中单独导出动画网格来做到这一点,因此骨骼动画数据仅在这些对象上,但这会引发这些对象的定位问题,因为动画对象的位置和旋转仅在从 Blender 导出的 scene.js 文件中可用。

  • 有没有办法将 Blender 中的动画对象导出为 立即使用 SkinnedMeshes,同时保持场景的其余部分完好无损?
  • 能否在 Three.js 中判断一个对象是否有动画?

更新

我意识到,因为无论如何我都是单独获取带有动画的对象,所以我可以循环遍历场景几何体以检查对象上是否有可用的动画,如果是这样,则为它创建一个 SkinnedMesh。但是定位问题仍然存在:Three.js 中的 (0,0,0) 位置和旋转将对象定位在场景的中心,而不是在其他点周围。我不确定这是什么意思,可能是 Blender 场景中心,但我认为这两个是一样的。

【问题讨论】:

    标签: animation three.js blender


    【解决方案1】:

    我在搅拌机的场景中心创建了一个测试对象并设置了动画。将其导入 Three.js 时,位置似乎发生了一些变化(对我来说,每个轴上的某个单位介于 -1.5 和 1.5 之间),但这可以在 Three.js 中手动修复。这种方法效果很好,但也有一些缺点:

    • 位置偏移可能会迫使您手动重新定位动画对象。这仅适用于需要精确定位的情况。
    • 您需要通过将对象放置在您想要的位置来手动从搅拌器中获取位置、旋转和缩放。 (你可以在三个中做到这一点,但我认为这将是更多的工作。

    它并不完美,但目前可以使用。我确信可以让 Blender to Three 导出器导出带有动画的对象,就好像它在场景的中心一样,然后为 Three.js 提供正确的位置、旋转和缩放,以便能够立即加载动画对象在正确的位置,如果我有时间我会尝试实现它。

    我希望这可以帮助其他遇到此问题的人,即使这只是临时修复。

    【讨论】:

      猜你喜欢
      • 2016-09-12
      • 2012-09-06
      • 2015-03-02
      • 2015-07-12
      • 2015-10-10
      • 1970-01-01
      • 2016-03-04
      • 2015-04-29
      • 2014-07-04
      相关资源
      最近更新 更多