首页
学习
活动
专区
圈层
工具
发布

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

用户输入的数据 以 顶点数组对象表示 Vertex Array Object,VAO void glGenVertexArrays(GLsizei n, GLuint *arrays); 返回 n个...它会在GPU上创建内存用于储存我们的顶点数据,还要配置OpenGL如何解释这些内存,并且指定其如何发送给显卡。顶点着色器接着会处理我们在内存中指定数量的顶点。...我们通过顶点缓冲对象(Vertex Buffer Objects, VBO)管理这个内存,它会在GPU内存(通常被称为显存)中储存大量顶点。...打个简单的比分,类似大家做高铁去目的地,VAO 就像一个个人,VBO 就是高铁,等很多人都到高铁站台了,我们通过 VBO 高铁将大家一起打包快速的送到 目的地(缓存对象 对应的GPU 内存),一个人一个人的送到目的地不划算...; glGenBuffers(1, &VBO); // 生成一个可用的缓存对象名称 存放于 VBO glBindBuffer(GL_ARRAY_BUFFER, VBO); // 创建一个新的缓存对象

1.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    一看就懂的 OpenGL 基础概念(3):各种 O 之 VBO、EBO、VAO丨音视频基础

    7、VBO、EBO 和 VAO 当我们开始上手写 OpenGL 的程序了,我们就要开始逐渐接触 VBO、EBO、VAO 了。...7.1、VBO 和 EBO 在 OpenGL 开发中,用于绘制的顶点数据首先是存储在 CPU 内存中的,比如我们在《RenderDemo(1):用 OpenGL 画一个三角形》中的三角形的 3 个顶点数据...7.2、VAO 通过对 VBO、EBO 的使用,我们可以减少 CPU 到 GPU 内存拷贝来提高性能,但是如果我们需要绘制大量的顶点和物体时,每次绘制都需要绑定正确的缓冲对象并为每个物体配置所有顶点属性...7.3、VBO、EBO 和 VAO 内存布局 上面我们介绍了 VBO、EBO 和 VAO 的使用,大致知道了它们的作用,我们继续来看看使用它们时的内存布局来加深一下印象: 当我们的 Vertex Shader...管理 VBO 布局格式 当 VAO 管理 VBO 和 EBO 时,布局格式如下图所示: VAO 管理 VBO 和 EBO 布局格式 参考: Learn OpenGL[1] VBO、EBO 和 VAO

    1.7K10

    OpenGL学习笔记 (二)- 顶点与绘制指令

    几何图元 OpenGL中有若干几何图元,但是最终这些图元都会被转化为点、线和三角形。通过组合三角形,OpenGL还额外提供了条带和扇面。 在OpenGL中,多边形区分正面与背面。...这样写入缓冲的确有点不太直观,因此在新版OpenGL中提供了glNamedBufferStorage和相关函数来直接对缓冲对象名称写入数据,不过由于实在是太新了,因此这个函数的兼容性并不好。...由于现代OpenGL的顶点数据都存在于缓冲对象中(曾经可以使用glVertexPointer函数),所以现在VAO已经不自带数据了,因此它需要绑定一个VBO。...VAO、VBO和顶点属性指针的关系可以参考下图。 VAO、VBO与顶点属性指针(图源Reference) 可以看到,真正绑定VBO的并不是VAO,而是相应的顶点属性指针。...另外,由于VAO和VBO没有直接的关系,因此VAO、VBO绑定的先后顺序并不重要,只要都先于glVertexAttribPointer即可。

    2K10

    音视频面试题集锦 2022.09

    我们通过改变上下文中的状态来改变接下来绘画的属性和操作的缓冲对象,然后 OpenGL 利用当前的上下文(Context)的状态去渲染。...常用的是顶点着色器和片段着色器。 9)什么是 VBO、EBO 和 VAO? 可以认为它们是在 OpenGL 中处理数据的三大类缓冲内存对象。...VBO(Vertex Buffer Objects)顶点缓冲区对象,指的是在 GPU 显存里面存储的顶点数据(位置、颜色)。...VAO(Vertex Array Object)顶点数组对象,主要作用是用于管理 VBO 或 EBO,减少 glBindBuffer、glEnableVertexAttribArray、glVertexAttribPointer...当 VAO 只管理 VBO 时,布局格式如下图所示: VAO 管理 VBO 布局格式当 VAO 管理 VBO 和 EBO 时,布局格式如下图所示: VAO 管理 VBO 和 EBO 布局格式

    1.6K20

    OpenGL自制游戏引擎-HelloTriangle

    Pipeline: 开始绘制图形之前,我们必须先给OpenGL输入一些顶点数据,OpenGL不是简单地把所有的3D坐标变换为屏幕上的2D像素;OpenGL仅当3D坐标在3个轴(x、y和z)上都为-1.0...顶点缓冲对象是我们在[OpenGL]教程中第一个出现的OpenGL对象。...就像OpenGL中的其它对象一样,这个缓冲有一个独一无二的ID,所以我们可以使用glGenBuffers函数和一个缓冲ID生成一个VBO对象: unsigned int VBO; glGenBuffers...顶点数组对象(Vertex Array Object, VAO)可以像顶点缓冲对象那样被绑定,任何随后的顶点属性调用都会储存在这个VAO中。...这样的好处就是,当配置顶点属性指针时,你只需要将那些调用执行一次,之后再绘制物体的时候只需要绑定相应的VAO就行了。这使在不同顶点数据和属性配置之间切换变得非常简单,只需要绑定不同的VAO就行了。

    1.9K20

    【C++】OpenGL:着色器基础与GLFW创建三角形示例

    基础知识 在学习图形渲染前,首先了解3个词汇: 顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 元素缓冲对象:Element...我们可以使用glGenBuffers函数和一个缓冲ID生成一个VBO对象: unsigned int VBO; glGenBuffers(1, &VBO); OpenGL有很多缓冲对象类型,顶点缓冲对象的缓冲类型是...顶点数组对象 我们必须告诉OpenGL如何去解析顶点数据,我们使用一个顶点缓冲对象将顶点数据初始化至缓冲中,建立了一个顶点和一个片段着色器,并告诉了OpenGL如何把顶点数据链接到顶点着色器的顶点属性上...刚刚设置的所有状态都将存储在VAO中(OpenGL核心模式要求使用VAO)。 元素缓冲对象EBO EBO是一个缓冲区,就像一个顶点缓冲区对象一样,它存储 OpenGL 用来决定要绘制哪些顶点的索引。...数组索引从0开始 0, 1, 3, // first Triangle 1, 2, 3 // second Triangle }; // 创建VAO、VBO和EBO unsigned

    89010

    OpenGL入门:从零开始的图形渲染之旅

    缓冲对象OpenGL使用各种缓冲对象存储数据:顶点缓冲对象(VBO):存储顶点数据索引缓冲对象(EBO):存储顶点索引顶点数组对象(VAO):存储顶点属性配置绘制你的第一个三角形有了基本理解,现在让我们绘制一个简单的三角形...和VBOunsigned int VAO, VBO;glGenVertexArrays(1, &VAO);glGenBuffers(1, &VBO);// 绑定VAOglBindVertexArray(...VAO);// 绑定VBO并复制顶点数据glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices)...定义了三角形的三个顶点创建并绑定了VAO和VBO将顶点数据复制到VBO配置了顶点属性在渲染循环中使用着色器程序并绘制三角形当这段代码运行时,你应该能看到一个橙色的三角形!...是一个循序渐进的过程,我建议按照以下路径学习:掌握基础:理解图形渲染管线、着色器和缓冲对象纹理与变换:学习如何应用纹理和变换物体光照:理解基本光照模型(环境光、漫反射、镜面反射)高级技术:学习法线贴图、

    23610
    领券