簡體   English   中英

在 OpenGL 中,是否可以從具有相同 vao 的多個索引中獲得 select? 或者跨 vaos 共享 vbo?

[英]In OpenGL is it possible to select from multiple indices with the same vao? Or share a vbo across vaos?

假設我們以 3 種方式繪制立方體:點、線框和陰影。 兩個繪圖命令使用相同的 8 個點,但這些點只能從 vbo 中繪制,線框是連接點對,陰影版本需要三角形。

這可以使用兩個索引 arrays 來實現。 對於線框:

uint32_t lineIndices[] = {
  0,1,     1,2,     2,3,     3,0,
  4,5,     5,6,     6,7,     7,4,
  0,4,     1,5,     2,6,     3,7
};

假設這些數字被綁定到索引數組 lbo 中。 畫線將是:

drawElements(GL_LINES, 24, GL_UNSIGNED_INT, BUFFER_OFFSET(0));

相反,如果我想繪制三角形,我需要一個不同的索引。

如果我有兩個索引 lbo 和 sbo,它們可以在同一個 vao 中嗎? 我可以只綁定我當前想要的那個以便使用它嗎? 如果沒有,是否可以在多個 vao 之間共享相同的 vbo 並將每個索引放在不同的 vao 中?

是的,您可以在一個索引緩沖區中放置多個索引序列。

glDrawElements() ( void* indices ) 的最后一個參數實際上不是指向 memory 的指針,而是索引緩沖區的起始字節偏移量。 您可以通過簡單地指定要繪制的第一個索引的字節偏移量並像往常一樣使用count參數指定要繪制的索引數來繪制索引的子集。

例如,您的索引緩沖區可能包含將立方體繪制為點所需的 8 個索引,然后將立方體繪制為線所需的 24 個索引,然后將立方體繪制為三角形所需的 36 個索引。 如果要將立方體繪制為線條,則可以計算第一個索引的字節偏移量( 8 * sizeof(uint32_t) ),然后簡單地調用glDrawElements() ,但將此偏移量作為最后一個參數傳遞。

旁注:索引緩沖區通常縮寫為“元素緩沖區 object”的EBO ,而不是IBO

暫無
暫無

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

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