文章目录
可编程管线
4.5版本的图形管线有4个处理阶段,还有1个通用计算阶段,每个阶段都需要由一个专门的着色器进行控制。
- 顶点着色阶段(vertex shading stage)
- 细分着色阶段(tessellation shading stage)
- 几何着色阶段(geometry shading stage)
- 片元着色阶段(fragment shading stage)
- 计算着色阶段(compute shading stage)
着色阶段之间,输入和输出的所有数据,都是通过着色器中的特殊全局变量传递。
着色语言
1. 概述
# version 450 core
void
main()
{
// 在这里编写代码
}
- 在程序起始位置,总是要使用#version来声明所使用的版本
- 输入点事main()函数,没有参数,没有返回值
- //和/**/,为注释符号
- 结尾必有分号
2. 变量
-
初始化
所有变量尽可能声明即初始化。
-
构造函数
GLSL比c++更注重类型安全,因此支持的数值隐式转换更少。
所需的类型 可以从这些类型隐式转换 uint int float int、uint double int、uint、float 上述类型转换可以应用于标量、向量以及矩阵,不能应用于数组和结构体。
其他数值的转换,需要使用显式的转换构造函数。
float f = 10.0; int ten = int(f);
-
聚合类型
基本类型 2D向量 3D向量 4D向量 矩阵类型 float vec2 vec3 vec4 mat2 mat3 mat4 mat2×2 mat2×3 mat2×4 mat3×2 mat3×3 mat3×4 mat4×2 mat4×3 mat4×4 double dvec2 dvec3 dvec4 dmat2 dmat3 dmat4 dmat2×2 dmat2×3 dmat2×4 dmat3×2 dmat3×3 dmat3×4 dmat4×2 dmat4×3 dmat4×4 int ivec2 ivec3 ivec4 —— uint uvec2 uvec3 uvec4 —— bool bvec2 bvec3 bvec4 —— -
初始化过程,与它们标量部分类似:
vec3 velocity = vec3(0.0,2.0,3.0);
-
类型转换
ivec3 steps = ivec3(velocity);
-
较长向量传递给较短向量的构造函数,向量自动取短
vec4 color; vec3 RGB = vec3(color); //现在RGB只有三个分量了
-
向量加长
vec3 white = vec3(1.0); //white = (1.0,1.0,1.0) vec4 translucent = vec4(white,0.5);
-
矩阵初始化,可以用少量的参数,进行对角矩阵或完全填充的矩阵初始化。
m = m a t 3 ( 4.0 ) = ( 4.0 0.0 0.0 0.0 4.0 0.0 0.0 0.0 4.0 ) m=mat3(4.0)= \begin{pmatrix} 4.0 & 0.0 & 0.0 \\ 0.0 & 4.0 & 0.0 \\ 0.0 & 0.0 & 4.0 \end{pmatrix} m=mat3(4.0)= 4.00.00.00.04.00.00.00.04.0 -
矩阵初始化,可以是指定每一个元素,也可以标量和向
-