頂點數組,緩衝區對象,頂點數組對象的關係

-、頂點數組

  • 頂點數組的出現,避免了固定管線中對於每一個頂點的指定,減小了調用,同時能夠避免冗餘頂點的傳輸。
  1. 啓用頂點數組 glEnableClientState(GLenum array) array有8個 包括頂點 顏色 紋理座標等等。對應禁用函數glDisableClientState(GLenum array).
  2. 指定頂點數組 glVertexPointer(GLint size ,GLenum type,GLsizei stride ,const GLVoid* pointer); glColorPointer等等
  3. 解引用 glArrayElement(GLint ith)解引用單個數組元素 glDrawElements 解引用數組元素的一個列表

2、緩衝區對象vbo

  • opengl 3.1只支持頂點數組對象存儲在緩衝區對象中。

建立數組

  1. 緩衝區對象 glGenBuffers(GLsizei n, GLuint * buffers);
  2. 激活緩衝區對象 glBindBuffer(GLenum target, GLuint buffer);
  3. 數據分配和初始化緩衝區對象 glBufferData;
  4. 更新緩衝區數據 glBufferSubData 或者GLvoid* glMapBuffer GLMapBufferRange glUnmapBuffer
  5. 在緩衝區對象之間複製數據 glCopyBufferSubData
  6. 清楚緩衝區對象 glDeleteBuffers

3、頂點數組對象vao

  • 一個頂點數組對象捆綁了一組調用的集合。也就是說 經過頂點對象綁定了頂點緩衝區 element緩衝區,最後只要激活這個頂點數組對象 就能夠直接解引用對應綁定的各類緩衝區對象。
  1. 建立頂點數組對象 glGenVertexArrays(GLsizei n,GLuint* arrays); 1.激活頂點緩衝區對象 glBindVertexArray;
  2. 清楚頂點數組對象 glDeleteVertexArrays;
  3. ~~`.glVertexAttribPointer 向shader傳統attribute 屬性數組
  • 因此一個典型的vao用法僞代碼能夠以下:
glGenVertexArrays(1,&vao)
glBindVertexArray(vao)
glGenBuffers(2,buffers)
glBindBuffer(GL_ARRAY_BUFFER,buffers[0]);
glBindBufferData(GL_ARRAY_BUFFER,xxxx,xx,);
glBindBuffer(GL_ELEMENT_ARRAY,buffers[1]);
glBindBufferData(GL_ELEMENT_ARRAY,xxxx,xx,);

glBindVertexArray(vao)
glDrawElements(GL_TRIANGLE, _indexCount, GL_UNSIGNED_BYTE, 0);
相關文章
相關標籤/搜索