顶点数组,缓冲区对象,顶点数组对象的关系
顶点数组,缓冲区对象,顶点数组对象的关系
leaveMeAlone 发表于11个月前
顶点数组,缓冲区对象,顶点数组对象的关系
  • 发表于 11个月前
  • 阅读 43
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

-、顶点数组

  •     顶点数组的出现,避免了固定管线中对于每个顶点的指定,减少了调用,同时可以避免冗余顶点的传输。
    
  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 解引用数组元素的一个列表

二、缓冲区对象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

三、顶点数组对象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);
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 3
码字总数 3979
×
leaveMeAlone
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: