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

用于动画模型的OpenGL即时模式与VBO,opengl,Opengl,一些背景信息: 我正在开发一款opengl游戏,希望有一天能发布一款独立的小游戏。我的OpenGL技能仍然非常有限,我的知识还远远超出OpenGL即时模式和显示列表 目前,我直接以即时模式渲染动画模型(从ms3d文件加载后)。对于相当大/复杂的地形,我只能加载和渲染大约20个动画模型,这些模型由大约200个三角形组成(也可以是纹理贴图)。由于我的一个目标是学习更多关于编程和游戏开发的知识,我觉得学习VBO(顶点缓冲区对象)对我来说很重要,但作为一名学生,我的时间很短。我宁愿把时间花在实现更多的事

一些背景信息: 我正在开发一款opengl游戏,希望有一天能发布一款独立的小游戏。我的OpenGL技能仍然非常有限,我的知识还远远超出OpenGL即时模式和显示列表

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


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

我建议尝试一下。像OpenGL中的大多数其他东西一样,它对我来说也非常混乱和可怕,但我只花了1天的时间就完成了一些示例并找出了如何实现它


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

我建议您尝试一下。像OpenGL中的大多数其他东西一样,它对我来说也非常混乱和可怕,但我只花了1天的时间就完成了一些示例并找出了如何实现它


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

与技术一样,事情已经向前发展。您似乎正在使用OpenGL2(或更早版本)的固定功能体系结构。现代OpenGL(高达4.x)使用可编程管道(称为着色器)。你可能想考虑一下新的OpenGL API,它们不太难学(在线上有很多东西),你可以在模型的绘制上有很大的创造力。
如果你想继续使用OpenGL的早期版本,也许你有一些旧的硬件,然后一定要学习VBOs。它可能并不总是最佳选项,但对于某些类型的几何体,它可能是最佳解决方案。与任何API一样,您对它了解得越多,就可以更好地利用可用的功能。

与技术一样,一切都在向前发展。您似乎正在使用OpenGL2(或更早版本)的固定功能体系结构。现代OpenGL(高达4.x)使用可编程管道(称为着色器)。你可能想考虑一下新的OpenGL API,它们不太难学(在线上有很多东西),你可以在模型的绘制上有很大的创造力。 如果你想继续使用OpenGL的早期版本,也许你有一些旧的硬件,然后一定要学习VBOs。它可能并不总是最佳选项,但对于某些类型的几何体,它可能是最佳解决方案。与任何API一样,您对它了解得越多,就可以更好地利用可用的功能

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

VBO将更有效率但是也可以使用显示列表加速动画,因此可以跳过VBO并使用显示列表。如果你编写代码是为了好玩,也是为了自己,那么就没有什么理由追求最新的技术。支持OpenGL 2的计算机比支持OpenGL 4的计算机多

无论您使用的是哪种OpenGL版本,着色器都值得研究——自OpenGL 2.0以来,GLSL就一直可用,而且功能非常强大

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

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

若它们“必须在每一帧重建”,那个么你们并没有正确地处理这个问题(除非你们的几何体是完全动态的,并且每一帧都改变拓扑结构)。可以将模型拆分为不需要重建的部分,也可以将整个内容放入单个显示列表中,并使用顶点着色器为部分设置动画

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

VBO将更有效率但是也可以使用显示列表加速动画,因此可以跳过VBO并使用显示列表。如果你编写代码是为了好玩,也是为了你自己,那么没有什么理由这么做