前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenGL 从入门到成魔-第4章-VAO 和 VBO

OpenGL 从入门到成魔-第4章-VAO 和 VBO

作者头像
瑶瑶
修改2023-09-21 19:24:32
9400
修改2023-09-21 19:24:32
举报

注:参考自bilibili系列视频,OpenGL 从入门到成魔-第4章-VAO 和 VBO https://www.bilibili.com/video/BV1zt4y1C7dh

OpenGL中的坐标系

1.X轴方向,右; 2.Y轴方向,上; 3.Z轴方向,向屏幕内,Z轴值越小,离我们眼睛越近

image.png

落在这个立方体范围内的点可以显示出来,之外的就不显示。

构造三角形顶点

image.png

三角形三个顶点分别为 (0,1,0) (-1,-1,0) (1,-1,0)

VBO的函数调用

image.png

image.png

  1. glGenBuffers(1, &VBO) 生成一个buffer,VBO初始化,第一个参数是buffer数量,第二个是要初始化的VBO指针。
  2. glBindBuffer(GL_ARRAY_BUFFER, VBO); 第一个参数buffer类型,第二个参数是buffer。告诉openGL,当前操作的VBO是哪个
  3. glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); 复制顶点数组到缓冲中供OpenGL使用
  4. glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); 告诉OpenGL该如何解析顶点数据(应用到逐个顶点属性上)
  • 第一个参数指定我们要配置的顶点属性。还记得我们在顶点着色器中使用layout(location = 0)定义了position顶点属性的位置值(Location)吗?它可以把顶点属性的位置值设置为0。因为我们希望把数据传递到这一个顶点属性中,所以这里我们传入0。
  • 第二个参数指定顶点属性的大小。顶点属性是一个vec3,它由3个值组成,所以大小是3。
  • 第三个参数指定数据的类型,这里是GL_FLOAT(GLSL中vec*都是由浮点数值组成的)。
  • 下个参数定义我们是否希望数据被标准化(Normalize),即归一化。如果我们设置为GL_TRUE,所有数据都会被映射到0(对于有符号型signed数据是-1)到1之间。我们把它设置为GL_FALSE。
  • 第五个参数叫做步长(Stride),它告诉我们在连续的顶点属性组之间的间隔。由于下个组位置数据在3个float之后,我们把步长设置为3 * sizeof(float)。

image.png

  • 最后一个参数的类型是void*,所以需要我们进行这个奇怪的强制类型转换。它表示位置数据在缓冲中起始位置的偏移量(Offset)。由于位置数据在数组的开头,所以这里是0。
  1. glEnableVertexAttribArray(layout); 以顶点属性位置值作为参数,启用顶点属性;顶点属性默认是禁用的。这里参数值应为0,因为在第三步中设置了将数据传递到位置为0的顶点属性中。顶点属性(Vertex Attribute)就是每个输入变量。
  2. glDeleteBuffers() 释放VBO

VAO

image.png

  1. glGenVertexArrays(1, &VAO) 创建
  2. glBindVertexArray(VAO) 绑定当前使用的VAO。由于OpenGL是个状态机,当绑定当前VAO之后,后面的VBO操作自然而然的都是在该VAO上进行的。
  3. glDeleteVertexArrays 释放VAO
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • OpenGL中的坐标系
  • 构造三角形顶点
  • VBO的函数调用
  • VAO
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档