索引繪圖
索引繪圖是一種由開發(fā)者指定頂點連接順序的繪圖方式。優(yōu)勢是可以復(fù)用頂點,減少內(nèi)存的使用。
如繪制一個金字塔3D圖形時,如果使用三角形帶或三角形組合繪制時,將會有多個頂點的重復(fù),但如果使用索引繪圖,則只需要5個點,重復(fù)利用,指定其連接順序即可實現(xiàn)金字塔3D圖形的繪制。

金字塔
金字塔,有5個面,由6個三角形組成,一共有18個頂點,然而實際肉眼可見的只有5個頂點。
可以理解為這個5個頂點通過其中3個頂點的不同組合,最終組合成金字塔6個三角形面的18個頂點。其中5個頂點都在不斷的重復(fù)利用。
索引繪圖就是通過索引的方式表示頂點之間的連接,將重復(fù)頂點復(fù)用進行圖形繪制的一種技巧。
image
索引繪制需要做兩件事:一個構(gòu)造良好的索引數(shù)組和一個新的索引繪制命令。
- 索引數(shù)組
索引數(shù)組,存儲在緩存對象中,它有一個特別的緩存對象,GL_ELEMENT_ARRAY_BUFFER. 你可以使用這個緩存對象來作為正常的緩存對象使用,就像GL_ARRAY_BUFFER。但是對于OpenGL他有特殊含義,那就是索引繪圖必須使用這個緩存對象。
- 索引繪制命令
為了進行索引繪圖,我們需要將索引數(shù)組綁定到GL_ELEMENT_ARRAY_BUFFER,然后調(diào)用glDrawElements。
//使用索引繪圖
/*
void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid * indices);
參數(shù)列表:
mode:要呈現(xiàn)的畫圖的模型
GL_POINTS
GL_LINES
GL_LINE_LOOP
GL_LINE_STRIP
GL_TRIANGLES
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
count:繪圖個數(shù)
type:類型
GL_BYTE
GL_UNSIGNED_BYTE
GL_SHORT
GL_UNSIGNED_SHORT
GL_INT
GL_UNSIGNED_INT
indices:繪制索引數(shù)組
*/
glDrawElements(GL_TRIANGLES, sizeof(indices) / sizeof(indices[0]), GL_UNSIGNED_INT, indices);