如何将Blender 3D动画导入iPhone OpenGL ES?

8

我正在尝试使用OpenGL ES在iPhone上进行动画制作。我可以在Blender 3D软件中完成动画制作。我可以从Blender导出.obj文件到OpenGL,然后在iPhone上运行。

但是我无法将我的动画作品从Blender 3D导出到OpenGL。请问有人能帮助我解决这个问题吗?

5个回答

1

首先,我不建议使用 .obj 格式进行此目的,因为 obj 文件格式不支持动画,只支持静态 3D 模型。因此,您需要将动画数据导出为单独的文件,并在加载 obj 文件时同时加载它。

我建议使用哪种文件格式取决于您的动画具体是什么。我记不清楚 Blender 支持哪些文件格式,但我记得它不会导出带有动画的 Collada 文件,这可能是最常见的建议。其他选项可能是用于角色动画的 md2,或用于简单的“刚性物体移动”的 3ds。我认为 Blender 的 FBX 导出器可以工作,尽管该文件格式可能过于复杂,超出了您的需求。


假设您只需要简单的刚体运动,那么您可以使用 .obj 格式来表示 3D 模型形状,并编写一个简单的 Python 脚本从 Blender 导出带有关键帧列表的文件,其中包含每个关键帧的帧、位置和旋转信息。然后在您的代码中加载这些数据并回放这些关键帧以控制 3D 模型的动画效果。

1
如果您查看Jeff LaMarche的这篇文章,您会发现一个blender脚本,可以将3D模型输出到C头文件中。还有一篇后续文章,改进了上述脚本。
运行脚本后,只需在源代码中包含头文件,并通过绘图函数传递顶点数组即可。理想情况下,您希望在运行时加载任意模型文件的方法,但对于原型设计来说,这种方法是最简单的。
既然您已经有了导入模型(obj)的方法,那么上述内容可能不适用。然而,使用blender脚本的优点是,您可以修改脚本以满足自己的需求,例如导出骨骼信息或模型关键帧。

1
这是一个旧问题,自那以后发布了一些新的iOS框架,例如GLKit。当您可以时,我建议尽可能依赖它们,因为它们会处理许多固有的转换,例如此类转换,尽管我没有研究过具体细节。此外,虽然不在iOS上,但OS X的新场景图技术(未来可能会到达iOS)将使所有这些问题得到更好的解决,聪明的个人可以使用该工具进行一些转换,然后将输出带到iOS。

0

同时也可以看看SIO2


0

我没有使用最近版本的Blender,但是我了解到它支持将网格动画导出为一系列的.obj文件。如果您已经可以在应用中显示单个.obj,则依次显示几个.obj将实现您想要的效果。

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

如果您想进一步优化此过程,可以压缩顶点数组,以便仅存储与上一帧动画不同的差异。

编辑:我看到Blender 2.59有导出COLLADA的功能。根据Blender手册,您可以导出对象变换,还可以导出带骨骼的对象的烘焙动画。在您的iPhone应用程序中支持COLLADA格式的好处是,您可以自由切换动画工具,因为它们大多数都支持此格式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接