我正在制作类似于Minecraft Classic的东西。 我已经有了地形发生器,但帧速率非常低!
我已经对它进行了优化,它只绘制了可见的四边形。 我正在使用glBegin(GL_QUADS)和glEnd()但只有一次,还有很多glVertex3fv。我开始学习这个,所以我不想使用VBO等所以我能做什么?
PS。我没有使用纹理。
照片 img580.imageshack.us/img580/5547/fpsx.jpg
事实上,我的伪优化根本不做任何事......
img143.imageshack.us/img143/9163/fps5.jpg
当所有事情都被绘制出来时,只有3 fps更糟......那不好......
但是看看有更多的glVertex ...调用(几乎是47倍),但帧率相似,所以也许这不是问题,那么它在哪里呢?
此外,我将添加没有任何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:)
答案 0 :(得分:5)
您需要使用VRAM缓冲区。
优化可见面有很大帮助,绘图时批处理面也有很大帮助,但是当所有面都存储在系统RAM中并且您逐个发送顶点时,两者都不会有明显的好处。
你需要在GPU上创建一个VBO,并在几何变化时将几何下载到它。渲染每一帧,它会更有效率。
在编写(非Minecraft)体素引擎时进行粗略测试,当多维数据集被组织成GPU上的一小组缓冲区时,显示出大约50-80倍的增益。那是存储在GPU上的原始立方体,从立即到缓冲区将会更大。
有一些库和引擎可以帮助您处理缓冲区和底层对象。一旦有了几何生成算法,大多数引擎都会接受创建的网格,以便在某种对象中使用。对于特定的OpenGL,Visualization Library可能会有所帮助。
答案 1 :(得分:0)
如果你可以将你的一系列四边形优化成三角形,你可能会看到显着增加。