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

相关推荐
viperrrrrrrrrr73 小时前
大数据学习(105)-Hbase
大数据·学习·hbase
行思理5 小时前
go语言应该如何学习
开发语言·学习·golang
oceanweave6 小时前
【k8s学习之CSI】理解 LVM 存储概念和相关操作
学习·容器·kubernetes
吴梓穆8 小时前
UE5学习笔记 FPS游戏制作43 UI材质
笔记·学习·ue5
学会870上岸华师8 小时前
c语言学习16——内存函数
c语言·开发语言·学习
XYN618 小时前
【嵌入式面试】
笔记·python·单片机·嵌入式硬件·学习
啊哈哈哈哈哈啊哈哈8 小时前
R3打卡——tensorflow实现RNN心脏病预测
人工智能·深度学习·学习
KangkangLoveNLP9 小时前
深度探索:策略学习与神经网络在强化学习中的应用
人工智能·深度学习·神经网络·学习·机器学习·自然语言处理
穷儒公羊10 小时前
第一部分——Docker篇 第六章 容器监控
运维·后端·学习·docker·云原生·容器
CAE虚拟与现实10 小时前
记录一下学习docker的命令(不断补充中)
学习·docker·容器·容器化·docker部署·docker命令