--------------------------------------------------内置函数------------------------------------------------------------------------------
GLSL(OpenGL Shading Language)提供了一系列内置函数,方便开发者在编写着色器时使用。以下是GLSL内置函数的分类和一些常用示例:
- 数学函数
这些函数用于常见的数学计算,如三角函数、指数函数等。
1.1 三角函数
sin(x):返回 x 的正弦值。
cos(x):返回 x 的余弦值。
tan(x):返回 x 的正切值。
asin(x):返回 x 的反正弦值。
acos(x):返回 x 的反余弦值。
atan(x):返回 x 的反正切值。
atan(y, x):返回 y/x 的反正切值。
1.2 指数和对数函数
pow(x, y):返回 x 的 y 次幂。
exp(x):返回 e 的 x 次幂。
log(x):返回 x 的自然对数。
exp2(x):返回 2 的 x 次幂。
log2(x):返回 x 的以2为底的对数。
sqrt(x):返回 x 的平方根。
inversesqrt(x):返回 x 的倒数平方根。
1.3 常规函数
abs(x):返回 x 的绝对值。
sign(x):返回 x 的符号(-1, 0, 1)。
floor(x):返回不大于 x 的最大整数。
ceil(x):返回不小于 x 的最小整数。
fract(x):返回 x 的小数部分。
mod(x, y):返回 x 除以 y 的余数。
min(x, y):返回 x 和 y 中的较小值。
max(x, y):返回 x 和 y 中的较大值。
clamp(x, minVal, maxVal):将 x 限制在 minVal 和 maxVal 之间。
mix(x, y, a):线性插值,返回 (1-a) * x + a * y。
step(edge, x):如果 x 小于 edge 返回0,否则返回1。
smoothstep(edge0, edge1, x):平滑插值。
1.4 几何函数
length(v):返回向量 v 的长度。
distance(p1, p2):返回点 p1 和 p2 之间的距离。
dot(x, y):返回向量 x 和 y 的点积。
cross(x, y):返回向量 x 和 y 的叉积。
normalize(v):返回向量 v 的单位向量。
faceforward(N, I, Nref):如果 dot(Nref, I) 小于0,返回 N,否则返回 -N。
reflect(I, N):返回向量 I 关于法线 N 的反射向量。
refract(I, N, eta):计算入射光线 I 在界面 N 的折射方向,eta 为折射率。
2. 纹理查询函数
这些函数用于从纹理中获取数据。
texture(sampler, P):从纹理采样器 sampler 中获取纹理坐标 P 处的颜色。
textureLod(sampler, P, lod):从纹理采样器 sampler 中获取指定层次 lod 处的纹理坐标 P 处的颜色。
textureProj(sampler, P):进行投影纹理采样。
textureGrad(sampler, P, dPdx, dPdy):使用显式梯度进行纹理采样。
3. 逻辑和比较函数
all(bvec):如果向量 bvec 的所有分量都为 true,返回 true。
any(bvec):如果向量 bvec 的任一分量为 true,返回 true。
not(bvec):对向量 bvec 的每个分量取反。
4. 数据类型转换
GLSL 提供了一些类型转换函数,用于在不同数据类型之间转换。
int(x):将 x 转换为 int 类型。
float(x):将 x 转换为 float 类型。
bool(x):将 x 转换为 bool 类型。
vec2(x):将 x 转换为 vec2 类型。
vec3(x):将 x 转换为 vec3 类型。
vec4(x):将 x 转换为 vec4 类型。
这些内置函数大大简化了着色器的编写,使得处理常见的数学运算、纹理采样和向量操作更加方便和高效。
-------------------------------------------内置变量-----------------------------------------------------------------------------------------
GLSL(OpenGL Shading Language)提供了一些内置变量,这些变量在不同类型的着色器(如顶点着色器、片段着色器等)中有不同的功能。以下是一些常见的GLSL内置变量:
- 顶点着色器内置变量
输入变量
gl_VertexID: 当前顶点的索引。
gl_InstanceID: 当前实例的索引。
输出变量
gl_Position: 顶点的裁剪空间位置,必须在顶点着色器中设置。
gl_PointSize: 点精灵的大小。
内置的输入属性
gl_Vertex: 旧版GLSL中,当前顶点的坐标。
gl_Normal: 旧版GLSL中,当前顶点的法向量。
gl_Color: 旧版GLSL中,当前顶点的颜色。
gl_MultiTexCoord0 - gl_MultiTexCoord7: 旧版GLSL中,当前顶点的纹理坐标。 - 片段着色器内置变量
输入变量
gl_FragCoord: 当前片段的窗口坐标。
gl_FrontFacing: 当前片段是否属于正面。
gl_PointCoord: 当前片段在点精灵中的坐标(用于点精灵渲染)。
输出变量
gl_FragColor: 旧版GLSL中,当前片段的颜色。
gl_FragData[n]: 旧版GLSL中,用于多个渲染目标的片段颜色。 - 几何着色器内置变量
输入变量
gl_in: 包含每个顶点着色器输出的数组。
gl_PrimitiveIDIn: 输入图元的ID。
输出变量
gl_Position: 输出顶点的裁剪空间位置。
gl_PrimitiveID: 输出图元的ID。
gl_Layer: 输出图元所属的层。 - 计算着色器内置变量
输入变量
gl_GlobalInvocationID: 全局调用ID。
gl_LocalInvocationID: 局部调用ID。
gl_WorkGroupID: 工作组ID。
gl_NumWorkGroups: 总工作组数。
gl_WorkGroupSize: 工作组的大小。 - 内置的变换矩阵(旧版GLSL)
这些变量在GLSL 1.20及以前的版本中是内置的,并自动提供了模型、视图和投影矩阵等:
gl_ModelViewMatrix: 模型视图矩阵。
gl_ProjectionMatrix: 投影矩阵。
gl_ModelViewProjectionMatrix: 模型视图投影矩阵。
gl_NormalMatrix: 法线矩阵。