回看EGL&OpenGL着色語言及案例,咱們從案例代碼6.3 頂點、紋理數據
中能夠看到,一個正方形四個頂點,會分紅兩個三角形六個頂點,頂點數組中就會存在重複的兩條數據,當圖形更復雜時,重複的數據就會更多。那麼有沒有存在一種方式能夠簡化?數組
以前咱們採用的繪圖方式是序列繪圖
,使用glDrawArrays
函數。緩存
序列繪圖是將頂點按順序存放在頂點緩存中,當繪圖時,按照圖元繪製方式進行讀取並繪製出圖形。 markdown
若是繪製三角形,會取出「1,2,3」數據進行繪製。函數
而索引繪圖
的頂點也是存儲在頂點緩存中,但它的讀取方式是由咱們提供的索引數據決定的,索引數組保存了頂點之間的鏈接關係。 繪製三角形時,會取出「1,3,7」數據進行繪製。oop
索引繪圖的優點:post
索引數組保存的是,圖形中三角形頂點的鏈接關係,哪三個頂點組成一個三角形
.好比說,上圖中的索引數組能夠經過1-2
連線切割爲兩個三角形,索引數組爲ui
GLuint indices[] = {
0,1,2,
1,3,2,
}
複製代碼
對應的頂點數組爲編碼
GLfloat attrArr[] = {
-0.5f, 0.5f, -1.0f, 0.0f, 1.0f, //左上0
-0.5f, -0.5f, -1.0f, 0.0f, 0.0f, //左下1
0.5f, 0.5f, -1.0f, 1.0f, 1.0f, //右上2
0.5f, -0.5f, -1.0f, 1.0f, 0.0f, //右下3
};
複製代碼
6.4 開始繪製
中spa
glDrawArrays(GL_TRIANGLES, 0, 6);
替換爲
glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_INT, indices);
/*
void glDrawElements(GLenum mode, GLsizei count,GLenum type, const GLvoid *indices
mode:圖元繪製方式
count:頂點總數
type:索引值類型
indices:索引數組存儲位置的指針
*/
複製代碼
推薦引用:.net