绘制许多四边形

时间:2011-06-09 13:59:28

标签: c++ optimization opengl frame-rate

我正在制作类似于Minecraft Classic的东西。 我已经有了地形发生器,但帧速率非常低!

我已经对它进行了优化,它只绘制了可见的四边形。 我正在使用glBegin(GL_QUADS)和glEnd()但只有一次,还有很多glVertex3fv。我开始学习这个,所以我不想使用VBO等所以我能做什么?

PS。我没有使用纹理。

修改

照片 img580.imageshack.us/img580/5547/fpsx.jpg

编辑2

事实上,我的伪优化根本不做任何事......

img143.imageshack.us/img143/9163/fps5.jpg

当所有事情都被绘制出来时,只有3 fps更糟......那不好......

但是看看有更多的glVertex ...调用(几乎是47倍),但帧率相似,所以也许这不是问题,那么它在哪里呢?

编辑3

此外,我将添加没有任何fps限制的信息:

img339.imageshack.us/img339/4111/fps6.jpg

它可能都是

无论如何,谢谢你的帮助。现在我要学习如何使用VBO(祝我好运)。从Debug更改为Release后,有一些(甚至不是很小)的改进(超过100 fps - 在18之前)。但它仅适用于3x3块(48x48块),现在当我将其增加到5x5块(80x80块)时,它再次为30-40 fps ......

http://img90.imageshack.us/img90/2321/fps7.jpg

再次感谢您的帮助。可能我会继续问VBO:)

2 个答案:

答案 0 :(得分:5)

您需要使用VRAM缓冲区。

优化可见面有很大帮助,绘图时批处理面也有很大帮助,但是当所有面都存储在系统RAM中并且您逐个发送顶点时,两者都不会有明显的好处。

你需要在GPU上创建一个VBO,并在几何变化时将几何下载到它。渲染每一帧,它会更有效率。

在编写(非Minecraft)体素引擎时进行粗略测试,当多维数据集被组织成GPU上的一小组缓冲区时,显示出大约50-80倍的增益。那是存储在GPU上的原始立方体,从立即到缓冲区将会更大。

有一些库和引擎可以帮助您处理缓冲区和底层对象。一旦有了几何生成算法,大多数引擎都会接受创建的网格,以便在某种对象中使用。对于特定的OpenGL,Visualization Library可能会有所帮助。

答案 1 :(得分:0)

如果你可以将你的一系列四边形优化成三角形,你可能会看到显着增加。

http://en.wikipedia.org/wiki/Triangle_strip