【发布时间】:2012-04-18 20:05:53
【问题描述】:
我正在 Maya 中创建一分钟长的动画,我打算在 OpenGL 中渲染它。我这样做是作为大学的一个项目。
场景中只有一张做出扭曲表情的人脸。网格有大约 2200 个四边形面。
我找到了一个将 Wavefront 对象文件转换为顶点和法线数组的 perl 脚本。我打算在 Maya 中以 24fps 的速度制作动画,然后将每一帧中的网格导出到 Wavefront 对象文件,然后通过 perl 脚本运行所有这些,这将为我提供顶点和法线数组。
因此,为了测试可行性,我将 Maya 中的两帧动画转换为目标文件,并通过脚本运行它(在调整后),这给了我数千个 glVertex 和 glNormal 调用。我将所有这些复制到我的 C++ 程序并编译它。运行流畅。
考虑到当我将 60sec*24 帧的 glVertex 和 glNormal 语句复制到程序中时程序会有多大,我想尝试使用 VBO。所以,我读过它,但我不太了解它的实现。
所以我的第一个问题是:在这种情况下实现 VBO 的最佳方法是什么?
我正在考虑顶点和法线的二维数组,每帧一个;和GL_STATIC_DRAW_ARB 用于glBufferDataARB() 的“使用”参数。
假设我的动画是 5 帧长,我的面部网格由 2200 个顶点和法线组成,那么我将创建:
GLfloat face_vertices[5][2200] = {.....};
GLfloat face_normals[5][2200] = {.....};
我的第二个问题:上面的代码是否会在 VBO 中工作或表现“良好”?
此外,我不确定这些信息是否重要,但我的计算机运行在 Intel 82945G 显卡上,而且我很确定我大学的 PC 也运行在 Intel 上。只是想我会提到这一点。
更新
性能也是一个问题。
【问题讨论】:
-
你的装备是怎么做的?顶点是否线性映射到关节?如果是,您可以轻松地将带有骨骼和动画的网格导出到 Wavefront 文件中,并由众多游戏引擎之一读取。其中一些能够在硬件着色器上播放动画,但我不确定 Intel 是否在支持列表中。
-
哦,我在那里做了一个相当大的精神跳跃。至于您的 VBO 优化 - 它们仅适用于具有旧(固定,例如无着色器)管道的静态网格。所以,如果英特尔的能力不是很强,你所能做的就是使用多个 VBO——每个用于一帧。
-
@Rekin “它们只适用于使用旧管道的静态网格物体” - 嗯?现在你是什么意思?顺便说一句,他没有使用任何绑定,而是一个简单的变形动画。