如何在OpenGL中为3d模型(网格)设置动画?

use*_*528 13 opengl animation model mesh

我想在OpenGL中为一个模型(例如人类,行走)制作动画.我知道有像骨架动画这样的东西(有狡猾的数学),但是这个......

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

好的,我知道这个想法只是一个小脚本,但值得进一步研究吗?改变VBO中的"keyFrame"/模型有什么好主意?

我知道记忆问题,但是我认为可以用小型号(而不是太多的动画)来完成.

Jus*_*ers 9

是的,你所指的方法在早期的3D视频游戏(地震等)中非常流行.

我建议你实现它与你描述的略有不同.而不是为每个可能的动画帧导出关键帧.导出更多展开键并插入顶点位置.这将允许更平滑的播放,显着减少内存使用.

这只需要一个(流式或动态)VBO.您可以在每个帧中找到上一个和下一个关键帧,插入顶点,并将结果上传到VBO中.

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

阅读:

  • 老实说,在顶点级别上实现此关键帧补间可能比实现骨架动画系统要多得多.骨架动画没有在"旧"时代完成,因为CPU缺乏执行所有这些额外顶点变换的马力.但是今天的GPU会在早餐时使用额外的矩阵和插值,而且GLSL中的代码也少得多. (3认同)
  • 具有多个关键帧的动画也可以导出为单个 OBJ 文件,这样您就不需要使用自定义/专有动画格式:/sf/ask/53000181/ -支持动画/13111722#13111722 (3认同)