GLSL(OpenGL Shading Language)是一种用于编写着色器程序的语言,它允许开发者直接控制图形硬件的渲染过程。GLSL提供了一系列内置函数,用于简化数学和几何计算,以及纹理采样等常见任务。以下是一些主要的GLSL内置函数分类及其描述:
几何函数
radians(angle):将角度转换为弧度。degrees(radian):将弧度转换为角度。sin(angle):计算给定角度的正弦值。cos(angle):计算给定角度的余弦值。tan(angle):计算给定角度的正切值。asin(value):计算反正弦值,返回范围在 [-π/2, π/2] 的弧度值。acos(value):计算反余弦值,返回范围在 [0, π] 的弧度值。atan(y, x):计算反正切值,返回范围在 [-π, π] 的弧度值。atan(y_over_x):计算反正切值,返回范围在 [-π/2, π/2] 的弧度值。
基本数学函数函数和变量操作
abs(value):返回value的绝对值。sign(value):返回value的符号(-1, 0, 1)。floor(value):向下取整到最接近的整数。ceil(value):向上取整到最接近的整数。fract(value):返回value的小数部分。trunc(x): 返回x的整数部分。round(x): 四舍五入到最接近的整数。mod(x, y): 返回x除以y的余数。min(x, y): 返回x和y中的较小值。max(x, y): 返回x和y中的较大值。clamp(x, minVal, maxVal): 将x限制在[minVal, maxVal]之间。pow(base, exponent):计算基数的指数次幂。exp(value):计算自然对数底数e的value次幂。log(value):计算value的自然对数值。exp2(value):计算2的value次幂。log2(value):计算value的以2为底的对数值。sqrt(value):计算value的平方根。inversesqrt(value):计算value平方根的倒数。
向量和矩阵函数
dot(v1, v2):计算两个向量的点积。cross(v1, v2):计算两个向量的叉积,仅适用于vec3类型。length(vector):计算向量的长度。distance(p1, p2):计算两点之间的距离。normalize(vector):归一化向量,使其长度为1。faceforward(N, I, Nref):如果Nref·I小于零,则返回N,否则返回-N。reflect(I, N):计算入射向量I关于法线N的反射向量。refract(I, N, eta):计算入射向量I通过法线N折射后的向量,eta是折射率。
条件和混合函数
mix(x, y, a):线性插值函数,返回x和y之间基于权重a的插值。step(edge, x):阶跃函数,如果x小于edge则返回0,否则返回1。smoothstep(edge0, edge1, x):平滑阶跃函数,返回x在edge0和edge1之间的平滑过渡值。
衍生函数
texture(sampler, coord):从纹理采样器中采样颜色。dFdx(expression):计算表达式在水平方向上的偏导数。dFdy(expression):计算表达式在垂直方向上的偏导数。
其他函数
discard: 丢弃当前像素/顶点。any(bvec): 如果向量中有任何元素为true,则返回true。all(bvec): 如果向量中所有元素都为true,则返回true。bool(x): 转换为布尔值,非零视为true。int(x): 转换为整数。uint(x): 转换为无符号整数。float(x): 转换为浮点数。vecN(vecM): 转换向量类型。matN(vecM): 创建矩阵。matN(row0, row1, ..., rowN): 创建矩阵,行向量作为参数。transpose(mat): 矩阵转置。outerProduct(vecA, vecB): 外积,产生一个矩阵。matrixCompMult(matA, matB): 矩阵元素乘积。inverse(mat): 矩阵逆。determinant(mat): 矩阵行列式。
纹理和图像函数
texture(sampler, coord): 从纹理采样。textureProj(sampler, coord): 从纹理采样,考虑投影坐标。textureLod(sampler, coord, lod): 从纹理采样,指定细节级别。textureOffset(sampler, coord, offset): 从纹理采样,指定偏移量。textureGrad(sampler, coord, dPdx, dPdy): 从纹理采样,指定梯度。imageLoad(image, coord): 从图像单元加载像素。imageStore(image, coord, color): 将颜色存储到图像单元的像素。
请注意,不同的GLSL版本和实现可能会有不同的内置函数集合,上述列表基于GLSL 1.20标准,但许多现代GPU支持更高版本的GLSL,提供了更多的功能和优化。例如,GLSL 4.50增加了更多高级函数,如双精度浮点运算和矩阵函数等。在编写着色器时,应参考特定GLSL版本的官方文档以确保正确性和兼容性。