OpenGL游戏引擎开发[2]-使用VAO和VBO绘制图形

基本概念

本节介绍如何使用VAO和VBO进行图形绘制。

关于VAO和VBO的概念,大家可以查阅 LearnOpenGL 等相关教程,我如果介绍的话,篇幅就太长了。而这些常见的OpenGL概念网上资料很多,这里我只简单介绍下我对相关概念的理解,如果各位不了解话,请查阅相关的OpenGL书籍。

CPU 与 GPU

大家都知道,我们平时写的程序是运行在CPU上的,CPU适合做逻辑运算。图形程序需要大量的数学计算,而这些计算对每个顶点来说都是相同的,比如说:一个精细的游戏人物模型由100万个顶点组成,控制该人物从场景中一个地方走到另一个地方就需要做平移变换,方法就是对组成模型的每个顶点都乘以一个平移变换矩阵,一个模型倒没什么,大家想想你们平时玩的一个游戏,场景中由多少个物体,再加上每个物体表面光照的计算,如果使用CPU来计算的话是很难达到实时渲染的。不信,大家自己写一个for循环1到100万,在for循环内部做一些耗时操作感受下。

所以,OpenGL使用GPU来进行这些顶点信息的计算,GPU就很适合做这些计算。因为这些计算有个特点,就是每个顶点的计算都是相同的,而且互不相干,因此可以并行处理。后面我们介绍的Shader就是GPU上并行运行的处理这些顶点计算、光照计算的程序。

内存 与 显存(显卡的内存)

图形程序也是程序,它只有渲染的那部分是借助GPU完成的, 而关于逻辑运算,比如:加载游戏数据,处理游戏中玩家的输入,游戏逻辑等这些操作还是在GPU上运行的。游戏数据包括游戏需要显示的数据,比如:游戏人物的网格数据,怪物的网格数据等;还有就是玩家数据,比如得分、等级等。前者需要从本地磁盘读取,加载到内存中,需要显示的时候,才调用相关的OpenGL命令将数据从内存中发送到GPU的显存。大家都知道,既然这些数据需要在显卡上做计算,那么当然GPU从显存中拿数据比从内存中拿数据要快得多。OpenGL就提供了管理显存中需要渲染数据的对象VAO和VBO。

VAO 和 VBO

VBO:顶点缓存对象,其中存储着顶点的相关信息(包括:顶点座标、顶点颜色、顶点法线、纹理座标等,这些也就是常说的顶点属性)。

VAO:顶点数组对象,内部维护多个顶点属性列表,而顶点属性存储在VBO中,即VAO中存储着VBO中有关顶点属性配置的信息。

代码实现

  1. 创建RawModel类,存储模型的顶点数据
  1. 创建Loader类,加载顶点数据
  1. 创建MasterRenderer类,渲染顶点数据
  1. 最后我们在App类中测试下,就来绘制一个经典的三角形吧。当然你想绘制其他的,也是照葫芦画瓢的事。
  1. 结果

三角形是黑色的,因为我们没给他设置颜色。下一节,我们介绍着色器,给三角形着色。

PS:说了你可能不信,背景色我随手写的。

源码:https://ww.lanzous.com/icaxqja

欢迎大家关注我的公众号【OpenGL编程】。

每天进步一点点,探索3D编程背后的技术细节,不再做只会“调包”的傻小白。以幽默风趣的行文风格,近乎白话文的专业知识讲解,分享3D编程的心得、教程、算法,带你走进3D编程的世界。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章