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