函数说明
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 Texture 函数文档

texture 函数用于对一个纹理进行采样,返回采样结果。它的语法如下:

vec4 texture(sampler2D sampler, vec2 coord [, float bias])
vec4 texture(samplerCube sampler, vec3 coord [, float bias])

其中,第一个参数 sampler 表示纹理的采样器。第二个参数 coord 表示要采样的纹理坐标。第三个可选参数 bias 表示采样偏移量,如果没有提供则默认为0。

texture 函数可以取样 2D 纹理和立方体纹理,取样结果将被返回为 vec4,其各个分量的值代表纹理的颜色值,范围为 0-1。

使用 texture 函数的示例代码:

uniform sampler2D textureSampler;
varying vec2 texCoords;
void main() {
    vec4 color = texture(textureSampler, texCoords);
    // 进一步处理采样结果
}
uniform samplerCube textureSampler;
varying vec3 texCoords;
void main() {
    vec4 color = texture(textureSampler, texCoords);
    // 进一步处理采样结果
}

参数

sampler

sampler 表示采样器,可以是 sampler2D 或者 samplerCube

coord

coord 表示要采样的纹理坐标。如果 sampler 是一个 sampler2D,那么 coord 应该是一个二维向量 vec2

如果 sampler 是一个 samplerCube,那么 coord 应该是一个三维向量 vec3

bias

bias 是一个可选参数,用于对采样结果进行偏移。如果没有提供,则默认为 0。

返回值

texture 函数的返回值是一个 vec4 向量,包含了取样结果的 RGBA 分量的值,分量的范围为 0-1。

示例

假设有一张 2D 纹理,宽度为 1024,高度为 1024,采用 RGBA 格式(每个像素有四个分量,用来表示红、绿、蓝、透明度),对应的采样器如下:

uniform sampler2D textureSampler;

我们可以使用 texture 来获取纹理像素(即颜色值):

vec2 uv = vec2(0.5, 0.5); // 假设要取样的点是正中心
vec4 pixelColor = texture(textureSampler, uv);
// pixelColor 就是纹理中点的颜色值,可以进行后续处理

如果有一个立方体纹理采样器,代码如下所示:

uniform samplerCube textureSampler;

我们可以使用 texture 来获取采样点对应的立方体纹理像素(即颜色值):

vec3 uvw = vec3(0.5, 0.5, 0.5); // 假设要取样的点是一个立方体面的中心
vec4 pixelColor = texture(textureSampler, uvw);
// pixelColor 就是采样点对应的立方体纹理面的颜色值,可以进行后续处理

参考资料