opengl 学习4

现代opengl ,就是一个巨大的状态机。在学习过程中常会听到"opengl上下文"一词。这个词语很容易让新手感到疑惑。不如直接这样理解:

"上下文" = "初始化指定变量" = "顶点缓冲区" + "顶点数据解析 + "着色器"

现代opengl的渲染流程是:我将顶点数据放入缓冲区中,着色器从缓冲区中取数据,并绘制图像。

顶点能够包含若干属性,坐标,纹理,颜色等。这取决于我们如何定义

缓冲区指的是GPU显存

着色器是运行在GPU上得到代码(C++代码运行在CPU上)

设定好上面三样东西(其实不止三样),我就说已经有了opengl上下文环境。其实体现在代码中,就是初始化一系列变量,没错吧?

然后一步步来

  1. 先创建一个缓冲区
cpp 复制代码
  unsigned int a;
  glGenBuffers(1, &a);//新建缓冲区,ID存在变量a中 
  glBindBuffer(GL_ARRAY_BUFFER,a); //绑定缓冲区(设置了一个上下文变量)
  1. 向缓冲区中写数据,供GPU使用
cpp 复制代码
//顶点数据(一行代表一个顶点,只有一个属性"坐标")
float vertices[6] = {
      -0.5f, -0.5f,
      0.5f, -0.5f,
      0.0f,  0.5f
};
//填入数据
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
  1. 告诉GPU我们的数据在缓冲区中是如何分布的,毕竟缓冲区中的数据本质是字节,opengl并不能区分哪个是顶点,哪个是属性,有几个顶点
cpp 复制代码
 //链接顶点属性(告知GPU,数据是如何排布的)                  
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), (void*)0);
//第一个参数:为顶点属性"坐标"编号为0
//第二个参数:顶点属性的元素个数为2,即(x,y)
//第三个参数:顶点属性中的元素的数据类型
//第五个参数:步长,即从该属性第一次出现的位置,到第二次出现的位置,中间要相隔多远。
  1. 编写着色器,告诉GPU要怎么使用缓冲区内的数据

具体的代码,参考LearnOpenGL-CN

相关推荐
叶子野格2 分钟前
《JAVA学习:前置知识》
学习
小猪佩奇TONY29 分钟前
Linux 内核学习(19) --- linux swap 机制
linux·学习·swap·kswapd
andrsted1 小时前
企业培训时间难统一?练题簿让在线免费刷题与培训考核更好安排
学习·微信小程序·小程序·学习方法·刷题
李航19831 小时前
虚拟盖房子,在游戏中学习房子的建造过程
人工智能·学习·游戏·计算机视觉·ai编程
霍霍的袁1 小时前
【C++11】左值右值引用与移动语义详细笔记(左值右值、右值引用、移动构造、移动赋值、引用折叠、万能转发)
c++·笔记·学习·visual studio
外收内放1 小时前
FastAPI猜字谜实战(6):日志与异常
开发语言·python·学习·fastapi
知识分享小能手2 小时前
C学习教程,从入门到精通,C语言单片机基础 — 完整知识点手册(19)
c语言·单片机·学习
小黄人软件2 小时前
Cluade 桌面端配置(ccswitch配置或文件直接配置)
学习
努力努力再努力FFF3 小时前
普通人适合考什么AI证书?不同基础和学习目标怎么选
人工智能·学习
叼烟扛炮3 小时前
Linux 学习笔记(三十二):线程控制——创建、等待与分离
linux·运维·服务器·笔记·学习·1024程序员节