openGL 基础(3) vertex buffer

  • 时间:2018-12-31 23:07 作者:zidea 来源:zidea 阅读:879
  • 扫一扫,手机访问
摘要:OpenGL 系列分享目的在于详情如何使用 OpenGL 来绘制画面。 为了大家能够更好了解如何开发游戏引擎做少量准备工作,同时也推出了C++ 基础分享,此分享也为游戏引擎开发分享服务。在之前我们已经在屏幕上绘制了一个三角形,普及一下,我们在玩游戏和看CG 动画的时候,所有的绚丽的画面都是由若干三角

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)

  • 全部评论(0)
最新发布的资讯信息
【系统环境|】技术JD解码黑箱:CTO埋的隐藏关卡与破局指南(2026-01-08 23:14)
【系统环境|】K8S部署 Qwen3-32B 大模型详细教程(2026-01-08 23:13)
【系统环境|】VibeCoding终极指南:别做Prompt做PM(2026-01-08 23:13)
【系统环境|】工具参数预设功能实现与安全实践指南:基于LlamaIndex Forge(2026-01-08 23:13)
【系统环境|】Spring AI + OpenAI 环境构建完整指南(2026-01-08 23:13)
【系统环境|】FFT魔力觉醒:FFTW C++高性能变换指南(2026-01-08 23:13)
【系统环境|】Docker+Ollama+Deepseek 本地大模型部署指南(2026-01-08 23:13)
【系统环境|】「WordPress建站05」宝塔安装网站SSL、伪静态设置(2026-01-08 23:12)
【系统环境|】域名还有更便宜的?从namesilo迁移到cloudflare,详细教程!(2026-01-08 23:12)
【系统环境|】Eplan P8 win10系统安装方法,亲测可用(2026-01-08 23:12)
手机二维码手机访问领取大礼包
返回顶部