openGL 基础(3) vertex buffer

作者 : 开心源码 本文共1352个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共197人阅读

OpenGL 系列分享目的在于详情如何使用 OpenGL 来绘制画面。 为了大家能够更好了解如何开发游戏引擎做少量准备工作,同时也推出了C++ 基础分享,此分享也为游戏引擎开发分享服务。在之前我们已经在屏幕上绘制了一个三角形,普及一下,我们在玩游戏和看CG 动画的时候,所有的绚丽的画面都是由若干三角形组成。所以,一切的一切都是从三角形开始,那么 OpenGL 是怎样流程将三角形绘制到屏幕上,首先需要 vertex buffer 和 vertex shader。

那么我们就从 vertex buffer 开始,vertex buffer 这个词便于了解,大家可以先不用考虑 vertex ,就只想他就是一个 buffer,占肯定字节的内存。大家都是在 C++ 也有像 char 这样类型 buffer,这里 vertex buffer 与之不同之处在于这里buffer 是占用的 GPU 的内存而不是 CPU 的内存。当我们要画三角形到画面时,绘制方法会从 GPU 的 ram 读取 buffer(顶点信息) 进行绘制。Shader 是一段代码计算出位置,运行这段代码可以绘制图形。

我们需要把之前绘制三角形顶点的数据转移到到openGL 的 buffer 中,作为绘制的数据。也就是创立缓存区对象。

我们定义缓存 buffer,这里第一个参数为定义 buffer 个数,1 表示我定义一个 buffer。

第二个为用于存储单一 ID 或者多个 ID 的 GLuint (unsigned int)变量或者数组的地址,这里个人推荐使用 unsigned int 类型代替 openGL 提供的 GLunit ,返回缓存对象的标示符),可以想象为一个对象 id,shader 可以根据 id 获取对象。

我们定义一个数组包含三角形顶一点的数据,

在使用 buffer 对象之前,需要将 buffer 对象绑定(连接)到相应的缓存上。glBindBuffer()有2个参数,分别为目标与buffer。

第一个参数(目标)告诉 VBO 该缓存对象将保存顶点数组数据还是索引数组数据:GL_ARRAY_BUFFER 或者 GL_ELEMENT_ARRAY。任何顶点属性,如顶点坐标、纹理坐标、法线与颜色分量数组都使用GL_ARRAY_BUFFER。

如何使用 openGL 方法,可以?docs.gl 网址进行搜索

可以使用glBufferData()将数据拷贝到缓存对象,第一个参数(目标)可以为GL_ARRAY_BUFFER 或者 GL_ELEMENT_ARRAY, 这里为?GL_ARRAY_BUFFER 。size(图中的 6)为待传递数据字节数量。第三个参数(图中的 position)为源数据数组指针,如 data 为 NULL,则 VBO 仅预留给定数据大小的内存空间。最后一个参数usage标志位VBO的另一个性能提醒,它提供缓存对象将如何使用:static、dynamic 或者 stream、与 read、copy 或者 draw。这里用 GL_STATIC_DRAW 表示仅需修改一次,可以屡次使用。

删除之前绘制三角形的方法,我们现在是 openGL 编程,我们 glDrawArrays 绘制,第一参数为绘制图形类型,第二个参数从 buffer 数据第一位开始绘制,第三表示绘制个数,由于是三个顶点,所以为 3.。运行程序没有效果,由于我们还没有定义 shader。

openGL 基础(1)

openGL 基础 (2)

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » openGL 基础(3) vertex buffer

发表回复