2014-11-21 136 views
1

因此,我在某處讀取儘可能少的VBO,並從一個VBO渲染許多對象。 我明白了,但不是那麼沒有組織? 我計劃創建3D形狀類,其中每個類的實例都有自己的VBO,它將在需要繪製時綁定。這與我之前寫的相反。在OpenGL中渲染多個對象

3D應用程序(視頻遊戲等)如何完成這項工作?

回答

2

首先,VBO只是存儲在視頻卡內存中的頂點集合。您可以使用單個VBO和模型矩陣進行轉換,也可以在其上應用不同的着色器和紋理。

這最好用2D遊戲來解釋,其中每個圖形基本上是一個四邊形; 4個頂點。 enter image description here

你真的需要爲4個頂點的VBO重複分配淹沒你的顯卡內存?

相反,我們可以有一個指向VBO和模型矩陣的指針來轉換它。 VBO通常存儲在一個資源管理器中,所以它只要我們喜歡就留在內存中。 所以,現在我們正在重新使用一個VBO來處理所有事情,我們正在對它應用不同的轉換和紋理。它看起來有很多很多的VBO,但實際上我們對於顯卡的記憶效率非常高。

下面是一些僞代碼:

class Sprite { 
    mat4 transform; 
    GLuint VBO = ResourceManager.quadVBO; 
} 
+0

好吧,我不明白你說關於繪製2D精靈什麼。但是如果我的場景包含許多複雜的模型呢?每個模型可能有數千個頂點。我是否應該將所有這些頂點存儲在一個VBO中? – Pilpel 2014-11-21 20:37:12

+0

儘可能重複使用!球體和立方體是兩組完全不同的頂點,應該有不同的VBO,但是如果你有籃球和足球,你應該使用一個球體VBO,並應用適當的紋理。另外需要記住的是,可以將每個具有自己的VBO的頂點/顏色/ texcoords分開。 – Iggy 2014-11-21 21:20:43