索引繪圖方式

回看EGL&OpenGL着色語言及案例,咱們從案例代碼6.3 頂點、紋理數據中能夠看到,一個正方形四個頂點,會分紅兩個三角形六個頂點,頂點數組中就會存在重複的兩條數據,當圖形更復雜時,重複的數據就會更多。那麼有沒有存在一種方式能夠簡化?數組


索引繪圖

以前咱們採用的繪圖方式是序列繪圖,使用glDrawArrays函數。緩存

序列繪圖是將頂點按順序存放在頂點緩存中,當繪圖時,按照圖元繪製方式進行讀取並繪製出圖形。 markdown

若是繪製三角形,會取出「1,2,3」數據進行繪製。函數

索引繪圖的頂點也是存儲在頂點緩存中,但它的讀取方式是由咱們提供的索引數據決定的,索引數組保存了頂點之間的鏈接關係。 繪製三角形時,會取出「1,3,7」數據進行繪製。oop

索引繪圖的優點:post

  • 不須要重複定義頂點信息,減輕編碼工做
  • 減小內存佔用,提升訪問效率

調整GLSL案例

1.數據調整

索引數組保存的是,圖形中三角形頂點的鏈接關係,哪三個頂點組成一個三角形.好比說,上圖中的索引數組能夠經過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
};
複製代碼

2. 繪製

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

序列繪圖&索引繪圖

相關文章
相關標籤/搜索