2011-06-09 43 views
1

我在做類似的Minecraft經典的東西。 我已經有地形發生器,但幀率很低!吸引了許多四邊形

我已經優化它,這就是它只能繪製四邊形,可以是可見的。 我使用在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(祝我好運)。在從調試版發佈到發佈版之後,只有很小的(甚至不是很小的)改進(超過100幀/秒 - 在18之前)。但它僅適用於3×3塊(48×48塊),現在當我把它提高到5×5塊(80×80塊)再次30-40 fps的是......

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

再次感謝您的幫助。也許我會繼續用VBO :)

+0

多少glVertex3fv?任何其他細節?你還做些什麼? – 2011-06-09 14:02:03

+1

請等待幾分鐘,然後我拿起我的靈能帽。 – 2011-06-09 14:03:07

+0

與glVertex3fv添加圖片調用 – dj8000 2011-06-09 14:09:47

回答

5

您需要使用VRAM緩衝區。

優化可見面的效果非常明顯,就像在繪圖時對面部進行批處理一樣,但是當所有面都存儲在系統RAM中並且您要逐個發送vert時,兩者都不會有非常顯着的好處。

您需要創建在GPU上一個VBO和幾何下載到,每當它改變。渲染每一幀,它將會更有效率。

當編寫一個(非Minecraft)體素引擎時,粗略測試表明,當立方體被組織成GPU上的一小組緩衝區時,大致獲得了50-80倍的增益。這是存儲在GPU上的原始立方體,從立即到緩衝區將更大。

有一些庫和引擎,可以幫助你處理緩衝器和底層對象。一旦你有幾何生成算法,大多數引擎將接受創建的網格,用於某種對象。對於特定的OpenGL,Visualization Library可能會有所幫助。

+0

我已經嘗試過用glDrawElements做,但很難只用一個glDrawElements我... – dj8000 2011-06-09 14:26:51

+0

得出這麼多輛四輪摩托車在我的玩弄,我生成素的每個16x16x16塊到緩衝區(主要做的閉塞和截剔除,但它也簡化了這一點)。對於一個體面的大小的區域,它來到了大約340個緩衝區。對於可能發生變化的幾何圖形,您需要某種塊概念來避免重新生成整個緩衝區。 – ssube 2011-06-09 14:29:41

0

詢問是否可以優化你的一系列的四邊形成trianglestrip,而不是你可能會看到一個顯著上升。

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

+0

Tristrips往往是相當複雜的生成(而且常常比trilists較慢)。繪圖GL_QUADs可能映射到其中一個或另一個,它將數千次這樣的問題稱爲glVertex。 – ssube 2011-06-09 14:18:48

+0

改變的形式在glBegin(GL_QUADS)到在glBegin(GL_TRIANGLE_STRIP) 沒有改善:/ http://img121.imageshack.us/img121/4797/fps2u.jpg – dj8000 2011-06-09 14:20:46

+1

這關當然不是完全真實的。四邊形分裂成三角形確實是事實,但從這個角度來看,這種改善不會很大。 – 2011-06-09 14:36:40