12

到目前为止,我们已经能够成功地将静态 OBJ 文件(转换为 .h)加载到我们的 OpenGL 应用程序中。

然后,我们可以对这些对象应用变换以便为它们设置动画。

我们项目的下一步是让专业的 3D 动画师在 Maya 中制作动画,并创建一个“加载器”以使用 OpenGL 以 3D 形式显示它们。

我们在网上找到了很多处理视频游戏和加载静态模型的示例,但我们的动画绝对是由动画师预先定义的,我们只需要加载它们。

重要的是要提到我们不能将它渲染到 oa 视频中,因为我们是在一个 AR 库之上构建的,它可以让用户真正地在动画中四处走动,这部分已经解决了,我们只需要使用 OpenGL 来渲染动画。

我已经研究了有关动画师应使用从 Maya 导出的适当格式的问题。

.dae (COLLADA) 文件格式似乎是封装模型和动画信息的好方法,并使用Assimp加载它,但我们还没有找到为 iOS 或 Android(这是我们正在开发的平台)编译的这个加载器。

我们在网上看到推荐的另一种方法是导出一系列 OBJ 文件,并为每一帧加载相应的 OBJ。

我们看到的另一种方法是使用“引擎”,但有太多太多了,很难知道我们应该关注哪一个。

我们不介意为引擎付费,但我们如何知道哪个引擎最适合?

我们找到了这些示例,但没有看到明确的“赢家”。

有没有人在 iOS 或 Android 设备上得到过类似的东西?

你有什么建议?

4

2 回答 2

2

好吧,OpenGL(-ES) 本身只是一个绘图 API,它不做任何与动画相关的事情。动画播放由自己的动画系统管理。这种系统的输出是转换参数,您可以在以后使用 OpenGL 绘图时使用这些参数来放置和变形几何体。如今,通常的方法是骨骼动画系统,即您向模型添加一些骨骼,其中每个顶点都绑定到一组骨骼,每个顶点每个骨骼的权重。骨骼可以表示为平移和四元数的组合。平移通常是一个常数,所以通常的动画系统给你的是描述骨架姿势的四元数向量。您将其加载到统一(vec4)或 GL_RGBA32F 1D 纹理中,宽度为骨骼数量,它在顶点着色器中用于基于姿势应用每个顶点的变换。顶点-骨骼权重通常作为附加顶点属性提交。

于 2012-08-28T10:36:51.013 回答
1

我已经为 Android 制作了一个 3D 框架,这就是我对动画的看法:

骨骼动画可以通过您的代码简单地完成:为每个肢体加载一个 OBJ,让 CPU 进行骨骼计算,然后将每个 OBJ 转换为 CPU 给定的坐标和角度。

关键帧动画可以通过使用具有相同顶点数的 OBJ 来完成。然后,您可以使用带有变量 t(time) 并为您提供组合网格的线性函数。您还可以使用贝塞尔曲线来制作更平滑的动画。

我想指出的另一个方面是您可以导入 MD5 文件。MD5 文件可以包含动画数据并且它们是二进制的,因此加载它们很快并且不需要解析器。

更多关于 MD5 的信息在这里

PS 如果您愿意,我可以向您推荐一本很棒的书,其中涵盖了在移动设备上开发时的许多 3D 问题;只是发表评论。而且..如果你不介意花钱,就买 Unity。它非常好,而且用途广泛。

于 2012-08-28T12:15:21.967 回答