函数说明
abs-取绝对值acos-反余弦函数acosh-反双曲余弦函数all-返回一个bool值,指示是否所有的值都为真any-返回一个bool值,指示是否有任何一个值为真asin-反正弦函数asinh-反双曲正弦函数atan-反正切函数atanh-反双曲正切函数ceil-向上取整clamp-将值限制在指定的范围内cos-余弦函数cosh-双曲余弦函数cross-计算向量叉积dFdx-返回一个向量或标量的x分量的导数dFdy-返回一个向量或标量的y分量的导数degrees-将弧度转换为角度determinant-计算矩阵的行列式distance-计算两个向量之间的距离dot-计算两个向量的点积equal-检查两个参数是否相等exp-计算自然指数函数的值exp2-计算2的幂次方faceforward-返回表面法线朝向floatBitsToInt-将浮点数转换为带符号整数floatBitsToUint-将浮点数转换为无符号整数floor-返回小于等于输入值的最大整数fract-返回输入值的小数部分fwidth-返回函数对输入值的x和y方向导数的绝对值之和gl_FragCoord-获取像素坐标信息gl_FragDepth-获取像素深度值gl_FrontFacing-判断面的方向gl_InstanceID-获取实例IDgl_PointCoord-获取点的纹理坐标gl_PointSize-获取点的大小gl_Position-获取顶点位置gl_VertexID-获取顶点IDgreaterThan-比较两个向量的大小greaterThanEqual-比较两个向量的大小intBitsToFloat-转换整型位表示的浮点数为单精度浮点数inverse-求逆矩阵inversesqrt-求倒数的平方根isinf-判断浮点数是否为正或负无穷大isnan-判断浮点数是否为NaNlength-返回向量长度lessThan-逐元素比较两个向量并返回bool向量lessThanEqual-逐元素比较两个向量并返回bool向量,小于或等于返回truelog-计算以e为底的对数log2-计算以2为底的对数matrixCompMult-Matrix元素逐一相乘max-返回两个数的较大值min-返回两个数的较小值mix-线性混合两个值mod-计算浮点数除法的余数modf-返回浮点数的整数和小数部分normalize-向量单位化not-按位求反notEqual-按位不等outerProduct-向量外积packHalf2x16-将两个浮点数压缩成半精度packSnorm2x16-将两个浮点数压缩成符号化半精度packUnorm2x16-将两个浮点数压缩成无符号半精度pow-幂函数radians-角度转弧度reflect-计算反射向量refract-计算折射向量round-四舍五入roundEven-根据奇偶性舍入sign-符号函数sin-正弦函数sinh-双曲正弦函数smoothstep-平滑阶梯函数sqrt-平方根step-阶梯函数tan-正切函数tanh-双曲正切函数texelFetch-获取纹素的颜色值texelFetchOffset-获取偏移量纹素的颜色值texture-对纹理进行采样textureGrad-对纹理进行采样,包括Mipmap层级计算textureGradOffset-对纹理进行采样,包括Mipmap层级计算和偏移量textureLod-根据给定的Mipmap层级对纹理进行采样textureLodOffset-根据给定的Mipmap层级和偏移量对纹理进行采样textureOffset-对纹理进行采样,包括偏移量textureProj-对投影纹理进行采样textureProjGrad-对投影纹理进行采样,包括Mipmap层级计算textureProjGradOffset-对投影纹理进行采样,包括Mipmap层级计算和偏移量textureProjLod-根据给定的Mipmap层级对投影纹理进行采样textureProjLodOffset-根据给定的Mipmap层级和偏移量对投影纹理进行采样textureProjOffset-对投影纹理进行采样,包括偏移量textureSize-获取纹理的尺寸transpose-矩阵转置trunc-向零舍入取整uintBitsToFloat-将32位无符号整数解释为浮点数unpackHalf2x16-解压缩单精度浮点数unpackSnorm2x16-解压缩单精度浮点数unpackUnorm2x16-解压缩单精度浮点数

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支持的一些常用函数。有了这些函数,你可以写出更简洁、更高效的着色器代码。