GLSL ES参考手册
以下是GLSL ES中的一些常用函数及其作用:
数学函数
- abs(x):返回x的绝对值
- acos(x):返回x的反余弦值(以弧度为单位)
- asin(x):返回x的反正弦值(以弧度为单位)
- atan(x):返回x的反正切值(以弧度为单位)
- atan(x,y):返回点(x,y)与原点(0,0)的直线与x轴正半轴之间的夹角(以弧度为单位)
- ceil(x):返回大于或等于x的最小整数
- clamp(x, minVal, maxVal):返回一个值,该值在[minVal, maxVal]之间
- cos(x):返回x的余弦值(以弧度为单位)
- degrees(x):将以弧度为单位的角度转换为以度为单位的角度
- exp(x):返回自然对数的底数e的x次幂
- floor(x):返回小于或等于x的最大整数
- fract(x):返回x的小数部分
- length(v):返回向量v的长度
- log(x):返回x的自然对数
- max(x,y):返回x和y之间的最大值
- min(x,y):返回x和y之间的最小值
- mix(x, y, a):线性混合x和y,使用参数a作为混合系数
- mod(x,y):返回x除以y的余数
- normalize(v):返回与向量v的长度相同,但方向相同的向量
- pow(x, y):返回x的y次幂
- radians(x):将以度为单位的角度转换为以弧度为单位的角度
- round(x):返回x的四舍五入整数
- sin(x):返回x的正弦值(以弧度为单位)
- sqrt(x):返回x的平方根
- step(edge, x):如果x小于边界值,则返回0,否则返回1
- tan(x):返回x的正切值(以弧度为单位)
纹理函数
- texture2D(sampler2D, vec2):从纹理中获取像素值
- texture2DProj(sampler2D, vec3):从纹理中获取像素值,并根据向量的第三个分量进行透视修正
- textureCube(samplerCube, vec3):从立方体贴图中获取像素值
向量和矩阵函数
- cross(a, b):返回向量a和向量b的叉积
- dot(a, b):返回向量a和向量b的点积
- faceforward(N, I, Nref):如果向量I与向量Nref之间的夹角小于90度,则返回向量N,否则返回向量
- length(v):返回向量v的长度
- matrixCompMult(x, y):将两个矩阵x和y中的对应元素相乘
- normalize(v):返回与向量v的长度相同,但方向相同的向量
- reflect(I, N):返回向量I在法线向量N处的反射向量
- refract(I, N, eta):返回向量I在法线向量N处的折射向量,其中eta是两种介质的折射率之比
条件语句函数
- bool any(bvec):如果bvec中的任何一个分量都是true,则返回true,否则返回false
- bool all(bvec):如果bvec中的所有分量都是true,则返回true,否则返回false
- float mix(float, float, float):根据混合因子返回两个值之间的混合值
- vec2 mix(vec2, vec2, float):根据混合因子返回两个向量之间的混合向量
- vec3 mix(vec3, vec3, float):根据混合因子返回两个向量之间的混合向量
- vec4 mix(vec4, vec4, float):根据混合因子返回两个向量之间的混合向量
- float step(float, float):如果第一个值小于第二个值,则返回0,否则返回1
- vec2 step(vec2, vec2):对于每个分量,如果第一个向量的对应分量小于第二个向量的对应分量,则返回0,否则返回1
- vec3 step(vec3, vec3):对于每个分量,如果第一个向量的对应分量小于第二个向量的对应分量,则返回0,否则返回1
- vec4 step(vec4, vec4):对于每个分量,如果第一个向量的对应分量小于第二个向量的对应分量,则返回0,否则返回1
- float smoothstep(float, float, float):对于t值在[minVal, maxVal]之间,返回一个平滑的插值因子
几何函数
- cross(a, b):返回向量a和向量b的叉积
- distance(p0, p1):返回两个点p0和p1之间的距离
- dot(a, b):返回向量a和向量b的点积
- faceforward(N, I, Nref):如果向量I与向量Nref之间的夹角小于90度,则返回向量N,否则返回向量-N
- length(v):返回向量v的长度
- normalize(v):返回与向量v的长度相同,但方向相同的向量
- reflect(I, N):返回向量I在法线向量N处的反射向量
- refract(I, N, eta):返回向量I在法线向量N处的折射向量,其中eta是两种介质的折射率之比
矩阵函数
- determinant(m):返回矩阵m的行列式
- inverse(m):返回矩阵m的逆矩阵
- matrixCompMult(x, y):将两个矩阵x和y中的对应元素相乘
- outerProduct(c, r):返回列向量c和行向量r的外积矩阵
- transpose(m):返回矩阵m的转置矩阵
函数重载
GLSL ES中支持函数重载,这意味着你可以定义同名函数,但它们的参数类型和数量不同。
例如,你可以定义以下三个名为foo的函数:
vec3 foo(vec3 v);
float foo(float f, vec2 v);
vec4 foo(vec4 a, vec4 b);
在调用foo函数时,编译器会根据传递给函数的参数类型和数量来选择正确的函数实现。
这些是GLSL ES支持的一些常用函数。有了这些函数,你可以写出更简洁、更高效的着色器代码。