通过VBO和VAO准备好数据后,接下来要指示GPU如何通过这些数据绘制图形。类似CPU可以通过执行程序来完成特定的任务,GPU也可以执行特定的程序来完成绘制任务,GPU执行的程序称为Shader,也叫着色器。OpenGL的着色器使用GLSL语言编写
着色器程序示例
三角形示例 使用到了顶点着色器(Vertex Shader)和片元着色器(Fragment Shader),下面分别对两者进行介绍。
首先介绍的是顶点着色器,示例中的三角形的Vertex Shader的源码如下所示:
#version 300 es
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;
out vec3 outColor;
void main()
{
gl_Position = vec4(aPos, 1.0);
outColor = aColor;
}
Vertex Shader的源码解析:
- #version 300 es 指定使用 OpenGL ES 3.0版本。
- aPos 声明接收顶点数据的变量,其中layout (location = 0)表示数据从0号属性取出,in表示这是一个输入变量。vec3表示这是一个3个浮点数的向量。
- aColor用于接收颜色数据,内容从1号顶点属性获得。
- 在main方法中,把aPos转成4维向量后传给gl_Position,这是个内置变量,一般用于传递顶点数据,是一个4维的浮点数向量,因此这里要把顶点从3维向量转为4维向量。
- outColor用于将颜色属性传递到下一个