一些背景信息:我正在开发一个opengl游戏以获得乐趣/体验,并希望有一天能发布一个小的独立游戏。我的OpenGL技能仍然非常有限,我的知识也没有超出OpenGL即时模式和显示列表的范围。
目前,我直接呈现我的动画模型在立即模式(从ms3d文件加载后)。与相当大/复杂的地形,我只能加载和渲染大约20个动画模型,包括或多或少200个三角形(也纹理映射)。因为我的一个目标是学习更多关于编程和游戏开发的知识,我觉得学习VBO (顶点缓冲对象)是很重要的,但是由于我是一名学生,所以时间很短。我宁愿花更多的时间去实现更多的事情,也不愿学习一些潜在的困难(当然,我会在下一个假期解决这个问题)。
我的问题:是否值得学习VBO并将模型加载器和呈现器更改为使用VBO而不是立即模式调用?会不会更有效率呢?我想到的游戏,如Left4Dead等,在那里你可能有许多详细的模型(即使我的目标不是在同一个联盟,我想要一些提示,作为如何改进)。我决定不使用显示列表,因为它必须重建每一个帧。同样的不适用于VBO吗?
发布于 2012-03-15 20:37:40
学习VBO并将模型加载程序和呈现器更改为使用VBO而不是立即模式调用值得吗?
VBO会更有效率。然而,您也可以使用显示列表来加快动画速度,因此可以跳过并使用显示列表。如果你是为了好玩和为自己编写代码,那么就没有理由追求最新的技术了。支持OpenGL 2的计算机比支持OpenGL 4的计算机多。
不管你使用的是什么OpenGL版本,着色器都是值得研究的-- GLSL是从OpenGL 2.0开始提供的,它非常强大。
无论如何,如果您对使用OPenGL /着色器感兴趣,您可能需要下载并检查NVIdia OPenGL SDK。它包含有趣的例子,例如使用顶点着色器和显示列表动画蒙皮模型。
我决定不使用显示列表,因为它必须重建每一个帧。
如果它们“必须重构每一帧”,那么您就无法正确地处理问题(除非您的几何学是完全动态的,并且改变每帧的拓扑结构)。要么将模型拆分成不需要重构的部分,要么将整个模型放入单个显示列表中,并使用顶点着色器对部分进行动画处理。
发布于 2012-03-15 20:04:48
我建议试一试。和OpenGL中的大多数其他东西一样,它看起来也让我感到困惑和恐惧,但我只花了一天的时间就完成了一些例子,并想出了如何做到这一点。
很难说它是否会给你提供一个加速,因为我们不知道你到底想做什么,或者在什么硬件上,但你可以这样想:你可以加载静态数据(如景物,如果它不是变形的话)到卡上一次,不再重新加载它。这意味着你不需要重新发送每一个帧的数百个或数千个顶点。这通常是一个相当重要的胜利。如果您在MacOS X上,我发现此页非常有用。即使您不在OS上,它也可能有帮助,因为在代码示例中没有任何特定于Mac的内容。
发布于 2012-03-15 20:05:46
与以往一样,科技的发展也在向前发展。您似乎在使用OpenGL2 (或更早的)固定函数体系结构。现代OpenGL (高达4.x)使用可编程管道(称为着色器)。您可能需要考虑查看更新的OpenGL API,它们并不难学(在线上有很多东西),您可以在模型的绘制中获得很大的创造性。
如果您想继续使用早期版本的OpenGL,也许您已经有了一些旧的硬件,那么一定要了解VBO。它可能并不总是最好的选择,但它可以是某些几何类型的最优解。与任何API一样,您对它了解的越多,就越能更好地利用可用的特性。
https://stackoverflow.com/questions/9727147
复制相似问题