学习openGl有二十来天了,接触、学习了以下内容:
OpenGL是什么
openGL是一组API规范,其只定义了一个函数接受哪些参数,返回哪些参数,据图的实现由开发者(显卡开发商)来进行;相关库
- GLFW :封装了创建窗口等功能;
- GLAB :动态加载OpenGL函数;
- stb_image : 一个简单易用的图像加载库;
创建窗口
初始化GLFW;
设置相关参数:主版本、最小版本、设置使用的模式、设置向前兼容;
创建窗口;
渲染;绘制图形(三角形、矩形)
定义顶点数据;
定义顶点、片段着色器;
编译着色器;
生成着色器程序,链接着色器;
生成绑定VAO、VBO、EBO;
拷贝顶点数据到VBO;
绑定顶点数组;
使用着色器进行渲染;着色器语言(GLSL)
GLSL是专门用来处理图形计算的,它是一种类C语言,变量类型包含C语言的基本类型int、float、double、uint和bool。其他支持的类型是向量、矩阵
in:定义的变量为输入变量;
out : 定义的为输出变量;
uniform :定义的变量可以在CPU程序中进行设置值;
顶点着色器是一个内置变量,需要顶部着色器为其赋值,其第四维度使用来做透视除法的;
片段着色器必须有一个输出变量指明片段的颜色值;
上一个着色器输出变量会被下一个着色器中指明为in类型的同名变量接受,这样实现着色器之间的参数传递;纹理
用来为创建的物体展示更多的细节,使用开源库stbi_image可以加载解析多种格式的图片。纹理的使用:
- 在顶点数据中定义纹理坐标;
- 使用stbi_image加载图片数据;
- 创建绑定纹理;
- 拷贝图片数据到纹理对象中;
在使用多个纹理时需要使用到纹理单元了,OpenGL至少支持十六个纹理单元GL_TEXTURE0~GL_TEXTURE15。
使用多个图片渲染时: - 激活对应的纹理单元
- 绑定纹理对象
总的来说,学习OpenGL比较吃力,在学习绘制三角形这一节时反反复复看了四五遍,第一天看不明白,第二天还是很模糊,改变策略,一天看一小节,反复的看这一小节,把例子代码读两遍,抄几遍,默写几遍,只要理解了流程、记住了关键函数再回头看文章就很容易了。