随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

OpenGL中的VAO、VBO、EBO

QT+OpenGL基础:

  1. QT+OpenGL创建一个三角形并动态改变三角形颜色
  2. OpenGL中的VAO、VBO、EBO
  3. QT+OpenGL 使用VAO、VBO、EBO结合绘制一个正方形
  4. QT+OpenGL使用一组顶点绘制两个三角形
  5. QT+OpenGL通过两个VAO来管理两个三角形
  6. QT+Opengl使用两个Shader绘制两个不同颜色的三角形
  7. QT+OpenGL从顶点着色器传递颜色数据给片元着色器
  8. QT+OpenGL简单纹理贴图
  9. QT+OpenGL纹理与颜色混合
  10. Qt+OpenGL混合两个纹理,并可以改变纹理透明度

一、概述

  目的:简单介绍一下VAO、VBO、EBO,使用他们能提高opengl的渲染效率

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

    VAO就相当于一个管理者的角色,在GPU中创建一个VAO对象用于管理VBO、EBO。VBO和EBO创建绑定好后会自动挂到VAO下。

  VBO:顶点缓冲对象(Vertex Buffer Object)

    VBO顶点缓对象,在GPU中创建一个VBO对象,并在GPU中分配一块内存用于存储顶点数据。会一次性把顶点数据copy到GPU

  EBO:元素缓冲对象/索引缓冲对象(Element Buffer Object)

    EBO索引缓冲对象,在GPU创建一个EBO对象,并在GPU中分配索引缓冲区,用于把EBO定义的顶点索引copy到GPU。如果使用了EBO则绘制方法必须换成glDrawElement。

      有了EBO,用户可以任意组合其所定义的顶点顺序。

  

二、代码示例

  1.VAO使用

    a.创建VAO

      参数介绍:

        第一个参数:代表创建几个VAO对象

        第二个参数:创建的VAO的地址

glGenVertexArrays(1, &VAO);//创建VAO:顶点数组对象

    b.绑定VAO

      参数:上一步创建的VAO对象

//绑定VAO和VBO对象
glBindVertexArray(VAO);

    c.删除VAO

glDeleteVertexArrays()

 

  2.VBO使用

    a.创建VBO

      参数介绍:

        第一个参数:创建多少个VBO

        第二个参数:创建的具体的VBO

glGenBuffers(1, &VBO);//创建VBO:顶点数组缓冲

    b.绑定VBO

      参数介绍:

        第一个参数:固定值,代表要创建一个数组缓冲区

        第二个参数:上一步创建的VBO

glBindBuffer(GL_ARRAY_BUFFER, VBO);

    c.给VBO分配内存

      参数介绍:

        第一个参数:固定值,要和上一步的对应起来

        第二个参数:顶点数组总共占用多少个字节

        第三个参数:要传给GPU的具体顶点数组的值

        第四个参数:代表这个数组不经常变动

//把顶点数据放入缓冲区
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

  

    3.EBO的使用

      1.创建EBO

        参数介绍:

          第一个参数:创建多少个EBO

          第二个参数:创建的EBO对象

glGenBuffers(1, &EBO);//EBO元素索引缓冲,用来指定顶点应该如何排列和绘制

      2.绑定EBO

        第一个参数:固定值,代表要创建一个元素数组缓冲区

        第二个参数:上一步创建的EBO

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);

      3.给EBO分配缓冲区(内存)   

      参数介绍:

        第一个参数:固定值,要和上一步的对应起来

        第二个参数:顶点数组总共占用多少个字节

        第三个参数:要传给GPU的具体索引缓冲的具体数据

        第四个参数:代表这个数组不经常变动

glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

  

posted on   飘杨......  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2023-08-21 EventBus源码再分析
2013-08-21 Android 导入工程文件引用包出错
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示