大家好!
本期丹丹带给大家的是GLSL语法基础
本期因为用文字即可描述清楚所以没有相关的视频文件。
大家也可以直接在bi站首页搜索:New程序媛 ,即可看到往期相应视频
OpenGL从3.1版本开始,固定功能管线从核心模式中去除,所以要求我们必须使用着色器来完成工作。而无论是 OpenGL还是其他图形API的着色器,通常都是通过一种特殊的编程语言去编写的。对于 OpenGL来说,我们使用的是 GLSL(Opengl Shading Langua)它是在OpenGL2.0版本左右发布的(在之前它属于扩展功能)。它与 OpenGL的发展是同时进行的,与每个新版本的 OpenGL一起更新。GLSL是一种专门为图形开发设计的编程语言,但它与“C”语言非常类似,也有C++的影子。
4.3版本中的图形管线有4个处理阶段,还有一个通用计算阶段,每个阶段都需要由一个专门的着色器进行控制。
1)顶点着色阶段( vertex shading stage)
2)细分着色阶段( tessellation shading stage)
3)几何着色阶段( eometry shading stage)
4)片元着色阶段(Fragment shading stage)
5)计算着色阶段( Compute shading stage)
1-4就是四个处理阶段,而5就是计算着色阶段,它与前四个阶段不同,它并不是图形管线的一部分,而是在程序中相对独立的一个阶段。计算着色阶段处理的并不是顶点和片元这类图形数据,而是计算应用程序给定范围的内容。
如下是一个典型的着色器:
#version version_numberin
type in_variable_name;
in type in_variable_name;
out type out_variable_name;
uniform type uniform_name;
int main()
{
// 处理输入并进行一些图形操作
...
// 输出处理过的结果到输出变量
out_variable_name = weird_stuff_we_processed;
}
OpenGL定义了in变量将数据拷贝到着色器中,out变量将着色器的内容拷贝出去,这些变量的值在执行着色器的时候更新,而另一类变量,uiform变量,是从应用程序中接收数据的,他们不会随着顶点或者片元的变化而发生任何改变。
首先让我们看看OpenGL变量:
命名规则:由字母数字以及下划线构成,不能以为数字或下划线开始,变量名也不可包含连续的下划线,因为这些名称是GLSL保留使用的。
基本数据类型:
float:IEEE 32位浮点数
double:IEEE 64位浮点数
int: 有符号二进制补码的32位整数
uint:无符号的32位整数
bool:布尔