19

我想在 OpenGL 中为模型(例如人、行走)设置动画。我知道有像骨架动画这样的东西(带有棘手的数学),但是这个呢....

  1. 在 Blender 中创建模型
  2. 在 Blender 中为该模型创建骨架
  3. 现在用那个模型和骨架在 Blender 中做一个行走动画
  4. 获取该动画的一些“关键帧”并将每个“关键帧”导出为单个模型(例如作为 obj 文件)
  5. 为 OpenGL 制作一个 OBJ 文件加载器(获取顶点、纹理、法线和面数据)
  6. 使用 VBO 在 OpenGL 中绘制动画模型(并获得一些棘手的想法如何更改 VBO 中的当前“keyFrame”/模型......也许是glMapBufferRange

好的,我知道这个想法只是一个小脚本,但值得进一步研究吗?更改 VBO 中的“关键帧”/模型的好概念是什么?

我知道内存问题,但我认为可以使用小型模型(而不是太多动画)来完成。

4

1 回答 1

13

您所指的在静态关键帧之间制作动画的方法在早期的 3D 游戏(地震等)中非常流行,现在通常被称为“混合形状”或“变形目标”动画。

我建议实施它的方式与您描述的略有不同。而不是为每个可能的动画帧导出模型。仅在“关键帧”处导出模型并插入顶点位置。这将允许更流畅的播放,显着减少内存使用量。

有多种实现选项:

  • 创建一个动态/流式 VBO。每帧查找前一个和下一个关键帧模型。计算它们之间的插值模型并将其上传到 VBO。

  • 创建一个静态 VBO,其中包含来自所有帧的网格数据以及每个顶点的附加“下一个位置”或“位移”属性。使用范围选项glDrawArrays来选择当前帧。在位置和下一个位置之间的顶点着色器中进行插值。

您实际上可以设置搅拌器以将场景的每一帧导出为 OBJ。然后,自定义工具可以将这些文件编译成漂亮的动画格式。

阅读更多:

于 2013-08-22T19:39:00.590 回答