openGL——glDrawArrays 和 glDrawElements
在openGL中,所有图形都是通过分解成三角形的方式进行绘制。(一个矩形分解成两个三角形进行绘制)
glDrawArrays 和 glDrawElements 的作用都是从一个数据数组中提取数据渲染基本图元。
一、glDrawArrays(int mode,int first,int count)
1、mode:
1>GL_TRIANGLES: 意味着openGL使用三个顶点来组成图形一个三角形。顶点0,1,2组成一个三角形,顶点3,4,5组成一个三角形,直到数组结束。
2>GL_TRIANGLE_FAN: 跳过刚开始的两个顶点,然后遍历每个顶点,让openGL将这些顶点于它们前一个,以及数组的第一个顶点一起组成一个三角形。
例如四个顶点:P2、P1、P0 ; P3、P2、P0 这2个三角形。
3>GL_TRIANGLE_STRIP: 顺序在每三个顶点之间绘制三角形,这个方法可以保证从相同的方向上所有三角形均被绘制。以V0V1V2,V1V2V3,V2V3V4……的形式绘制三角形
2、first
表示从数组缓存中哪一位开始绘制,一般定义为0
3、count
顶点的数量
二、glDrawElements
如果代码中需要索引来渲染,采用了EBO时,则需要用glDrawElements函数来代替glDrawArrays函数,来指明我们从索引缓冲渲染
void glDrawElements( GLenum mode, GLsizei count,GLenum type, const GLvoid *indices);
第一个参数指定了我们绘制的模式;
第二个参数是我们打算绘制顶点的个数;
第三个参数是索引的类型; GL_UNSIGNED_BYTE/INT/SHORT
第四个参数指向索引数组的指针
注意:
绑定VAO时也会自动绑定EBO
不要在解绑VAO之前解绑EBO(GL_ELEMENT_ARRAY_BUFFER),否则它就没有这个EBO配置。
只要解绑VAO在解绑EBO前边即可。
//解绑VAO
glBindVertexArray(0);
//解绑EBO
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
//解绑VBO
glBindBuffer(GL_ARRAY_BUFFER, 0);
更新:2022年11月8日14:26:38
> 参考:[glDrawArrays 和 glDrawElements - momokeke - 博客园]
https://www.cnblogs.com/keguniang/p/9866065.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构