上一篇文章已经成功的搭建了环境,传送门:环境搭建。并成功的运行了第一个例子——动态改变背景颜色。
本篇要学习怎么在屏幕上绘制点和三角形
首先我们要了解什么是着色器(shader)
顾名思义啊,着色器就是用来着色的工具(这不废话嘛!)
OpenGL是通过以固定函数作为‘胶水’连接多个着色器的小程序来工作的。不管要绘制点什么,我们总要编写一对着色器。
OpenGL的着色器是以OpenGL着色语言(GLSL)进行编写的,该语言源于C。
将着色器的源代码放入到着色对象中并进行编译,然后多个着色对象链接到一起生成一个程序对象。每个程序对象包含一个或多个着色器阶段的多个着色器。
而OpenGL的着色器阶段包括顶点着色器、细分曲面控制和评价着色器、几何着色器、片段着色器和计算着色器。然而最最最最基本的管线配置只有一个顶点着色器,如果要显示到屏幕上,还需要一个片段着色器。
上面我们提到了三个东西,着色器、着色对象、程序对象,我理解的他们的关系如下图所示
按照上面描述的来编写着色器,我们要写两个着色器,一个是顶点着色器,一个是片段着色器,因为要显示到屏幕上,所以必须有片段着色器
1.第一个顶点着色器
//这条语句是声明 想要着色编译器使用着色语言的4.5版本
//core 关键字表示我们只想用OpenGL核心模式所支持的特性
#version 450 core
void main(void) {
gl_Position = vec4(0.0, 0.0, 0.5, 1.0); //gl_Position表示顶点的输出位置
}
跟普通C函数没有太大区别,不同的是GLSL着色器的main没有参数;函数内给gl_Position进行赋值,gl_Position是连接着色器至OpenGL其余部分的纽带。
所有以gl_开头的变量都是OpenGL的一部分
2.第一个片段着色器
与顶点着色器写法大致相同
#version 450 core
out