1. VAO顶点数组对象(Vertex Array Object)

可以像顶点缓冲对象那样被绑定,任何随后的顶点属性调用都会储存在VAO中。

好处:当配置顶点属性指针时,你只需要将那些调用执行一次,之后再绘制物体的时候只需要绑定相应的VAO。这使在不同顶点数据和属性配置之间切换变得非常简单,只需要绑定不同的VAO就行了。刚刚设置的所有状态都将存储在VAO中。

OpenGL的通过VAO知道如何处理顶点输入。如果我们绑定VAO失败,OpenGL会拒绝绘制任何东西。

1.1 储存内容

1.2 使用过程

glEnableVertexAttribArray和glDisableVertexAttribArray的调用。
通过glVertexAttribPointer设置的顶点属性配置。
通过glVertexAttribPointer调用与顶点属性关联的顶点缓冲对象。

定义一个储存了顶点属性配置和应使用的VBO的顶点数组对象。生成/配置所有的VAO(和必须的VBO及属性指针),然后储存它们供后面使用。当我们打算绘制物体的时候就拿出相应的VAO,绑定它,绘制完物体后,再解绑VAO。

step1. 创建一个VAO

unsigned int VAO;
glGenVertexArrays(1, &VAO);

step2. 使用VAO

使用glBindVertexArray绑定VAO。

step3. 绑定和配置对应的VBO和属性指针,之后解绑VAO供之后使用。

step4. 代码

// ..:: 初始化代码(只运行一次 (除非你的物体频繁改变)) :: ..
// 1. 绑定VAO
glBindVertexArray(VAO);
// 2. 把顶点数组复制到缓冲中供OpenGL使用
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// 3. 设置顶点属性指针
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);[...]// ..:: 绘制代码(渲染循环中) :: ..
// 4. 绘制物体
glUseProgram(shaderProgram);
glBindVertexArray(VAO); //绘制三角形
glDrawArrays(GL_TRIANGLES, 0, 3);

初识OpenGL (-)VAO顶点数组对象相关推荐

  1. WebGL 2.0实现Vertex Array Objects(VAO,顶点数组对象)

    在WebGL 2.0中,终于把VAO转正了.在WebGL 1.0中,可以通过拓展实现.Babylon.js引擎默认情况下,每次渲染都使用VAO完成.简单介绍下VAO,下面截取自<OpenGLES ...

  2. 《OpenGL ES 3.x游戏开发(下卷)》一1.2 顶点数组对象

    本节书摘来异步社区<OpenGL ES 3.x游戏开发(下卷)>一书中的第1章,第1.2节,作者: 吴亚峰 责编: 张涛,更多章节内容可以访问云栖社区"异步社区"公众号 ...

  3. openGL 入门 2--顶点数组对象 VAO 和 缓存对象 VBO

    用户输入的数据 以 顶点数组对象表示 Vertex Array Object,VAO void glGenVertexArrays(GLsizei n, GLuint *arrays); 返回 n个 ...

  4. android平台下OpenGL ES 3.0实例详解顶点属性、顶点数组

    OpenGL ES 3.0学习实践 android平台下OpenGL ES 3.0从零开始 android平台下OpenGL ES 3.0绘制纯色背景 android平台下OpenGL ES 3.0绘 ...

  5. [OpenGL] VAO、VBO、EBO

    一.BO(Buffer Object,缓冲对象) 缓冲对象是OpenGL管理的一段内存,为了与我们CPU的内存区分开,一般称OpenGL管理的内存为:显存. 显存,也就是显卡里的内存.显卡访问显存比较 ...

  6. OpenGL VAO与VBO

    绘画三角形: glDrawArray(GL_TRIANGLES, 0, 3);//从第0个点开始取,取三个 标准化设备坐标(Nomalized Device Coordinates,NDC): 顶点着 ...

  7. 深入理解:顶点缓存对象(VBO)

    深入理解:顶点缓存对象(VBO) 顶点缓存对象(VBO) 深入理解:顶点缓存对象(VBO) 前言 一.创建VBO 二.绘制VBO 更新VBO 实例 源码下载 引用 前言 GL_ARB_vertex_b ...

  8. OPenGL中的缓冲区对象

    引自:http://blog.csdn.net/mzyang272/article/details/7655464 在许多OpenGL操作中,我们都向OpenGL发送一大块数据,例如向它传递需要处理的 ...

  9. OpenGL VAO VBO EBO(IBO)的绑定、解绑问题

    文章目录 前言 VBO 链接顶点属性 EBO(IBO) VAO 绑定顺序 解绑顺序 前言 首先感谢知乎的一篇文章,解答了我的疑惑,在此记录一下心得. 那么我们先简单介绍一下这三个对象,以及一些必要操作 ...

最新文章

  1. 【LibreOJ】#6299. 「CodePlus 2018 3 月赛」白金元首与克劳德斯
  2. oracle 状态unknown,解决Oracle crs_stat状态为UNKNOWN有关问题
  3. 使用squid配置透明代理并对上网行为进行控制
  4. 【模型开发】EDA探索性分析
  5. 数据结构:平衡二叉树概念、旋转
  6. matplotlib 中文显示 的问题
  7. Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法...
  8. 使用 nohup 设置后台进程
  9. 2017-3-23校内训练
  10. 【二叉树】剑指offer:二叉树中序遍历的下一个节点
  11. RHEL 5.1 下面安装tftp服务
  12. FastDFS原理概括
  13. js打开新页面与关闭当前页面
  14. Android如何计算时间差
  15. 苏州大学计算机考研 复试机试真题2013-2020真题及Python题解
  16. 成都蚂蚁金服java_成都蚂蚁金服暑期实习Java后台开发面经(已收到OC)
  17. H5 img标签图片无法显示 -- 解决方案
  18. Linux使用ASF云挂卡(挂游戏时长)
  19. 实例011阳阳买苹果
  20. Linux中正则表达式详细命令及代码(附实验笔记)

热门文章

  1. 交换机千兆和百兆对网速影响_百兆路由器接千兆交换机,那么局域网网速可以达千兆吗?...
  2. 多人在线编辑文档 开发_字节跳动全资收购 “幕布”,与腾讯阿里竞逐在线文档市场...
  3. suid提权(linux)
  4. uniapp小程序实现弹幕功能
  5. 比360都好用的删除文件方式
  6. micropython视频_零基础如何优雅入门“网红”Python?小白必看的MicroPython视频合集:从入门到精通!...
  7. web前端主要技术概述
  8. 华为荣耀20和x10比较_华为畅享20pro和荣耀x10哪个好 有对比才能更好地选择
  9. Theshy 能否与 Faker 并肩,他是重要的影响因素之一
  10. 手机摄影入门(一) 放下“无单反不摄影”的观念