用于动画模型的OpenGL立即模式与VBO

时间:2012-03-15 19:53:03

标签: opengl

一些背景信息: 我正在开发一个有趣/经验的opengl游戏,并希望有一天能够发布一个小型独立游戏。我的OpenGL技能仍然非常有限,而且我的知识并没有超出OpenGL立即模式和显示列表。

目前我直接以立即​​模式渲染我的动画模型(从ms3d文件加载后)。对于相当大/复杂的地形,我只能加载和渲染大约20个由或多或少200个三角形组成的动画模型(也是纹理映射)。我的一个目标是学习更多有关编程和游戏开发的知识,我觉得学习VBO(顶点缓冲对象)很重要,但是因为我是学生,所以我的时间很短。我宁愿花时间去实现更多的东西而不是学习一些潜在的困难(我当然会在下一个假期解决这个问题)。

我的问题:学习VBO并更改模型加载器和渲染器以使用VBO而不是立即模式调用是否值得?会更有效率吗?我正在考虑像Left4Dead等游戏,你可能有许多详细的模型(尽管我不打算在同一个联盟中,但我想要一些提示如何改进)。我决定不使用显示列表,因为它必须每帧重建。这同样不适用于VBO吗?

3 个答案:

答案 0 :(得分:2)

  

学习VBO并更改模型加载器和渲染器以使用VBO而不是立即模式调用是否值得?

VBO会更有效率。 HOWEVER 您还可以使用显示列表加速动画,因此您可以跳过VBO并使用显示列表。如果您为自己编写乐趣,那么就没有理由追逐最新技术。与支持OpenGL 4的计算机相比,支持OpenGL 2的计算机更多。

无论使用OpenGL版本,您都使用着色器值得研究 - 自OpenGL 2.0以来GLSL已经可用,并且它非常强大。

无论如何,如果您对使用OpenGL /着色器感兴趣,可能需要下载并检查NVIdia OPenGL SDK。它包含有趣的示例,例如使用顶点着色器和显示列表设置蒙皮模型。

  

我决定不使用显示列表,因为它必须每帧都重建。

如果它们“必须每帧都重建”,那么你就不会正确地接近问题(除非你的几何是完全动态的并且每帧都改变拓扑)。将模型拆分为不需要重建的部分,或将整个部分放入单个显示列表中,并使用顶点着色器为部件设置动画。

答案 1 :(得分:1)

我建议尝试一下。像OpenGL中的大多数其他东西一样,它看起来真的让我感到困惑和恐惧,但是我花了一天的时间来研究一些例子并弄清楚如何去做。

很难说它是否能为您提供加速,因为我们并不确切地知道您要做什么或在什么硬件上做什么,但是想一想:您可以加载静态数据(如风景,如果它不可变形)一次到卡上,而不是再次重新加载它。这意味着您不会每帧重新发送数百或数千个顶点。这通常是一个非常重要的胜利。如果您使用的是MacOS X,我发现this page非常有帮助。即使您没有使用OS X,它也可能会有所帮助,因为代码示例中没有特定于Mac的内容。

答案 2 :(得分:1)

与技术一样,事情已经发生了变化。您似乎正在使用OpenGL2(或更早版本)固定功能架构。现代OpenGL(高达4.x)使用​​可编程管道(称为着色器)。你可能想要考虑研究更新的OpenGL API,它们不是很难学习(网上有很多东西),你可以在模型的渲染中获得很大的创造力。

如果你想保留早期版本的OpenGL,也许你有一些旧的硬件,然后肯定会了解VBO。它可能并不总是最佳选择,但它可以是某些类型几何的最佳解决方案。与任何API一样,您对此了解得越多,就可以更好地利用可用功能。