優(yōu)化繪制三角形
元素緩沖對象
元素緩沖對象(Element Buffer Object,EBO),也稱為索引緩沖對象(Index Buffer Object),用于存儲繪制圖元所需的頂點索引數(shù)據(jù),是一種用于優(yōu)化繪制三角形元素的機制。
舉例來說,假設(shè)我們需要繪制一個矩形。由于OpenGL主要處理三角形,我們可以繪制兩個三角形來形成一個矩形。按照之前的做法,我們需要向著色器發(fā)送六個頂點,但由于這六個點中有兩個重復(fù)的,因此會造成內(nèi)存和性能的浪費。而使用EBO,簡單來說,就是只定義四個頂點,然后根據(jù)頂點索引擇需取用,當然其中有兩個會被重復(fù)使用。
下面我們定義頂點和繪制矩形所需的索引:

EBO的使用和VBO一樣,只是緩沖類型不再是GL_ARRAY_BUFFER,而是GL_ELEMENT_ARRAY_BUFFER。

最后用函數(shù)glDrawElements()替換glDrawArrays()。

mode表示繪制的基本圖元類型,此處依然為GL_TRIANGLES。
count表示要繪制頂點的個數(shù),這里應(yīng)為6。
type表示索引的數(shù)據(jù)類型,這里是GL_UNSIGNED_INT。
indices指定EBO中的偏移量(或者傳遞一個索引數(shù)組,但是這是當你不在使用索引緩沖對象的時候),此處為0。
至此,繪制一個矩形的流程如下:

標簽:OpenGL