2010-01-23 71 views
8

我想在使用OpenGL ES的iPhone上做动画。我可以在Blender 3D软件中做动画。我可以从Blender导出为.obj文件到OpenGL,它可以在iPhone上运行。如何将Blender 3D动画导入iPhone OpenGL ES?

但我无法将我的动画作品从Blender 3D导出到OpenGL。任何人都可以请帮我解决这个问题吗?

回答

1

如果你看看this article by Jeff LaMarche,你会发现一个混合器脚本,它将把3D模型输出到C头文件中。还有一个followup article改进了上述脚本。

运行脚本后,它就像在源代码中包含标题一样简单,并通过绘图函数传递顶点数组。理想情况下,您需要一种在运行时加载任意模型文件的方法,但对于此方法的原型设计来说,实现起来最简单。

由于您已经有导入模型(obj)的方法,因此上述可能不适用。但是,使用搅拌器脚本的优点是您可以修改脚本以适应您自己的需要,也许还可以导出骨骼信息或模型关键帧。

1

首先,我不会为此推荐.obj,因为obj文件格式不支持动画,只有静态3D模型。因此,您需要将动画数据导出为与obj同时加载的单独文件。

我会推荐哪种文件格式取决于您的动画是什么。我不记得Blender支持哪些文件格式,但我记得不是导出带有动画的Collada文件,这将是最一般的建议。其他选项可以是角色动画的md2,或简单的“刚性物体移动”动画的3ds。我认为Blender的FBX导出器可以工作,尽管该文件格式可能太复杂以至于无法满足您的需求。


也就是说,假设你只需要简单的刚性物体的运动,你可以使用.OBJ的3D模型的形状,然后写一个简单的Python脚本输出从搅拌机的文件具有列出的关键帧,与每个关键帧的框架,位置和旋转关联。然后在代码中加载数据并在3D模型上回放这些关键帧。

0

我还没有使用Blender的最新版本,但我的理解是它支持将网格动画导出为一系列.obj文件。如果您已经可以在您的应用中显示一个.obj文件,那么一个接一个地显示它们中的几个文件就可以达到您想要的效果。

现在请注意,这不是导出此类动画的最有效的形式,因为每个.obj文件都会有很多重复的信息。如果网格在一段时间内保持固定(即只有顶点与多边形结构一起移动,uv坐标等全部固定),那么您只需导入整个第一个.obj,然后从其余的只读入顶点数组。

如果您想优化这个更多,您可以压缩顶点数组,以便您只存储与动画的上一帧的差异。

编辑:我看到Blender 2.59已导出到COLLADA。根据Blender manual,您可以导出对象转换,并且还可以导出已绑定对象的烘焙动画。在iPhone应用程序中支持COLLADA格式的好处是您可以自由切换动画工具,因为它们大多数都会导出这种格式。

1

这是一个老问题,自那时以来,一些新的iOS框架已经发布,如GLKit。我建议尽可能多地依靠它们,因为它们会照顾许多这样的固有转换,尽管我没有研究具体细节。此外,虽然iOS不支持iOS OS X的新Scene Scene技术(可能会在iOS上推出),但将所有这些进一步完善,一个狡猾的个人可以使用该工具进行一些转换,然后将输出到iOS。