首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏环境中的OpenGL VBO / DisplayList

游戏环境中的OpenGL VBO / DisplayList
EN

Stack Overflow用户
提问于 2011-11-04 07:02:39
回答 1查看 2.4K关注 0票数 1

我正在开发一个小游戏(使用OS X Lion,Xcode4,Objective-C / C++,Cocoa,OpenGL)。这是一个相当简单的概念。我有一些在二维数组中移动的对象。现在我想为我的游戏编写一个OpenGL图形用户界面。

我所做的是遍历我的数组,并为其中的每个对象绘制一个立方体,在它的特定位置,具有依赖于对象类型的纹理。当然,我的第一个简单实现有点占用CPU,所以下一步是实现一个纹理图集。因为我有很多顶点,所以还有很大的改进空间。

我读到VBO和DisplayLists要快得多。我完成了一些教程,但我仍然有很多关于在真正的动态游戏环境中实现的问题。

假设我为我的游戏对象编译了一些显示列表。如果我想把它放在一个特定的位置,我必须使用glTranslatef()。但是很多glTranslatef()可能非常占用CPU。我该怎么处理呢?当然,我可以在每个可能的位置为每种游戏对象创建一个显示列表,但这似乎不切实际,而且它只会起作用,因为我的游戏是基于磁贴的……

VBO似乎也有同样的问题。当然(至少从我的理解),我可以创建一个完整的顶点网格,然后遍历我的数组,为每个对象渲染一个与对象位置相关联的顶点立方体。但我不明白如何将纹理应用于整个顶点网格中的特定立方体。我是否必须为网格内的每个立方体表面创建纹理坐标,或者为一个立方体的所有6个面创建纹理坐标就足够了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-05 05:07:14

显示列表和VBO通常对琐碎的几何图形没有帮助。如果我没记错的话,有时他们甚至可以放慢速度。如果我没记错的话,那就是蓝色的OpenGL。

显示列表在OpenGL 1.x中是“尽善尽美”的,但随着VBO的引入,显示列表被认为是遗留功能。

如果我们知道您的OpenGL目标版本会有所帮助。在使用即时模式的OpenGL 1.x中,你要做的就是设置你的“相机矩阵”( OpenGL没有,你只是把它的转置留在矩阵堆栈上),然后在你的渲染循环中为每个模型推送和弹出矩阵。

使用OpenGL 2.x或1.xARB扩展,您可以将变换放在统一矩阵中,然后为每个模型更新统一。这不会给你带来多少好处,因为更新制服的速度也很慢。

我认为最好的做法是在着色器中为OpenGL提供(一组)属性矩阵。这将通过一次性传输所有数据来减少CPU开销。我想不出技术实现的细节,但我认为属性是每个顶点的,所以您必须传递一个索引,指示在用于放置转换的另一个缓冲区中查找的位置。我从来没有这样做过,因为大多数模型包含的几何和纹理信息比设置变换的时间还多。

也就是说,使用VBO重新设计它并在属性中提供转换可能是一项巨大的工作,CPU使用率提高了8%。可能是2.0 duo酷睿2双核处理器的一个内核上的8%

编辑

统一缓冲区对象才是我真正想要的。可能是为了一个统一的区块布局。蓝皮书(也许还有橙色书)和谷歌有更多的细节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8003007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档