我正在尝试使用 OpenGL ES 在 iPhone 上制作动画。我可以在 Blender 3D 软件中制作动画。我可以作为 .obj 文件从 Blender 导出到 OpenGL,它可以在 iPhone 上运行。
但我无法将我的动画作品从 Blender 3D 导出到 OpenGL。谁能帮我解决这个问题?
首先,我不推荐 .obj 用于此目的,因为 obj 文件格式不支持动画,仅支持静态 3D 模型。因此,您需要将动画数据导出为一个单独的文件,与 obj.
我会推荐哪种文件格式取决于您的动画到底是什么。我不记得 Blender 支持哪些文件格式,但我记得它不会导出带有动画的 Collada 文件,这是最普遍的建议。其他选项是用于角色动画的 md2,或用于简单“四处移动的刚性对象”动画的 3ds。我认为 Blender 的 FBX 导出器会起作用,尽管该文件格式可能对您的需要来说太复杂了。
也就是说,假设您只需要简单的刚性对象移动,您可以使用 .obj 来生成 3D 模型形状,然后编写一个简单的 Python 脚本从 Blender 导出一个文件,该文件在列出的关键帧处包含帧、位置和每个关键帧的旋转。然后在您的代码中加载该数据并在 3D 模型上播放这些关键帧。
这是一个老问题,从那时起一些新的 iOS 框架已经发布,例如 GLKit。我建议尽可能多地依赖它们,因为它们会处理许多这样的固有转换,尽管我没有研究具体细节。此外,虽然不在 iOS 上,但未来适用于 OS X 的新场景图技术(可能会在 iOS 上出现)将这一切更进一步,狡猾的人可以使用该工具进行一些转换,然后获取输出到 iOS。
如果您查看Jeff LaMarche 的这篇文章,您会发现一个混合器脚本,它将 3D 模型输出到 C 头文件。还有一篇 后续文章改进了上述脚本。
运行脚本后,只需在源代码中包含标题,然后通过绘图函数传递顶点数组即可。理想情况下,您需要一种在运行时加载任意模型文件的方法,但对于原型设计,此方法是最容易实现的。
既然您已经有了导入模型(obj)的方法,那么上述内容可能不适用。但是,使用搅拌机脚本的优点是您可以修改脚本以满足您自己的需要,也许还可以导出骨骼信息或模型关键帧。
我没有使用过最新版本的 Blender,但我的理解是它支持将网格动画导出为一系列 .obj 文件。如果您已经可以在您的应用程序中显示单个 .obj ,那么一个接一个地显示其中几个将达到您想要的效果。
现在,请注意,这不是导出此类动画的最有效形式,因为每个 .obj 文件都会有很多重复的信息。如果您的网格随着时间的推移保持固定(即只有顶点随着多边形结构移动,uv 坐标等全部固定),那么您可以只导入整个第一个 .obj 并从其余部分读取顶点数组。
如果您想进一步优化这一点,您可以压缩顶点数组,以便只存储与动画前一帧的差异。
编辑:我看到 Blender 2.59 已导出到COLLADA。根据Blender 手册,您可以导出对象变换,还可以导出绑定对象的烘焙动画。在您的 iPhone 应用程序中支持 COLLADA 格式的好处是您可以在动画工具之间自由切换,因为它们中的大多数都导出这种格式。
也看看SIO2。