2013-04-21 128 views
3

我正在使用OpenGL,並在我的程序中繪製各種幾何形狀(正方形,三角形等),每個對象具有不同的紋理。在不同的紋理上繪製不同的對象在同一個VBO OpenGL

我測試了使用VBO和着色器執行渲染,並且這很好地爲每個對象創建一個VBO。

glDrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); 

我發現,最好的辦法是建立一個單一的VBO其中包含所有頂點:當大量對象(150和200之間)的......這意味着很多調用函數glDrawElements()出現問題繪製(頂點,紋理座標,索引等)。

問題在於,我無法爲每個對象使用不同的紋理,因爲VBO會繪製所有幾何圖形一次。

問題是......執行我所需要的最佳方式(最佳)是什麼?而不使用已被棄用的函數或方法glBegin()/glEnd()glDrawArrays()(我正在使用開放GL 3.0及更高版本)。

PD:我使用OpenGL和C++。

回答

3

如果你想呈現一個VBO先用一個紋理,然後用另一:

  1. 綁定的第一個紋理
  2. 渲染日ËVBO
  3. 綁定的第二個紋理
  4. 渲染VBO再次

如果你想畫一個VBO的一部分,與一個紋理和它的一部分與另一個紋理你有兩種選擇:

  • 將VBO分成兩個獨立的VBO並分別渲染它們或
  • 將兩個紋理合併爲一個較大的紋理,並相應地調整紋理座標。
+0

非常感謝您的理解 – user2303826 2013-10-03 04:07:45

+0

如果回答了您的問題,請將其標記爲已接受的答案。謝謝! – fintelia 2013-10-04 14:17:00

2

使用瓷磚紋理

含義,一個紋理圖像您有更多的物體的紋理。有時它也被稱爲紋理地圖集。所以相應地改變紋理座標。

如果您在單張圖片中使用4x4紋理,則可以在單個圖片中使用16個不同的對象VBO。當然,您受限於您要使用的紋理圖像和紋理質量的最大尺寸。

3D紋理和紋理數組

爲GFX HW的進展,現在也3D紋理和紋理陣列可用,因此您可以爲每個對象現在...質地的一個切片,而不需要紋理之間切換。 ..

相關問題