簡體   English   中英

在同一個VBO OpenGL上使用不同紋理繪制不同的對象

[英]Draw different objects with differents textures on the same VBO OpenGL

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

我測試了使用VBO和着色器執行渲染,這很好地創建了每個對象的VBO。 當大量對象(150到200之間)出現問題時......這意味着對函數glDrawElements()調用非常多:

glDrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

我發現最好的方法是創建一個包含要繪制的所有頂點的VBO(頂點,紋理坐標,索引等)。

這個問題是我不能為每個對象使用不同的紋理,因為VBO一次繪制所有幾何體。

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

PD:我使用OpenGL和C ++。

如果要首先使用一個紋理渲染VBO,然后使用另一個紋理渲染VBO:

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

如果你想用一個紋理繪制VBO的一部分,而用另一個紋理繪制它的一部分你有幾個選項:

  • 將VBO拆分為兩個獨立的VBO並單獨渲染它們,
  • 將兩種紋理組合成一個較大的紋理,並相應地調整紋理坐標,或
  • 使用數組紋理並在着色器中選擇正確的圖層 如果您的目標硬件支持,這可能是您的最佳選擇。 為了獲得更大的靈活性,請考慮稀疏紋理數組。

使用平鋪紋理

在一個紋理圖像中的含義您有更多對象的紋理。 有時它也被稱為紋理圖集 所以相應地改變紋理坐標。

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

3D紋理和紋理數組

隨着gfx HW的進步,3D紋理和紋理數組也可用,因此你現在每個對象可以有一片紋理......無需在紋理之間切換......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM