函数说明
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 textureProjGrad() 函数文档

函数介绍

textureProjGrad() 函数根据纹理坐标、投影向量和dPdx/dPdy值从2D纹理进行采样,可以被用于任意图形对象的着色器中。它依赖于纹理对象的采样器类型,因此在使用此函数之前必须先将纹理绑定到采样器上。

语法

vec4 textureProjGrad(sampler2D sampler, vec3 P, vec3 dPdx, vec3 dPdy)

参数

sampler

  • 纹理采样器。输入必须是 2D 纹理对象。
  • 类型:sampler2D
  • 指定:必须

P

  • 材质表面上一个 3D 点的纹理坐标。
  • 类型: vec3
  • 指定: 必须

dPdx

  • 投影向量在P所在表面的 x 方向上的导数。
  • 类型: vec3
  • 指定: 必须

dPdy

  • 投影向量在P所在表面的 y 方向上的导数。
  • 类型: vec3
  • 指定: 必须

返回值

  • 返回纹理中由纹理坐标P.xy/P.w指定的2D纹理的采样值。如果纹理采样器的类型为 integerunsigned integer,则将返回浮点数值转换为整数值。如果采样器被配置为使用 sRGB 纹理数据,则将线性值转换为 sRGB 值。
  • 类型:vec4

示例

下面是一个简单的示例,它在片段着色器中使用 textureProjGrad() 函数从 2D 纹理进行采样:

#version 330

in vec2 texCoord;

out vec4 FragColor;

uniform sampler2D textureSampler;

void main()
{
    // 定义投影向量的导数
    vec3 dPdx = dFdx(vec3(texCoord, 1));
    vec3 dPdy = dFdy(vec3(texCoord, 1));
    
    // 从 2D 纹理进行采样
    FragColor = textureProjGrad(textureSampler, vec3(texCoord,1), dPdx, dPdy);
}

在本例中,dPdxdPdy 值是通过 dFdx()dFdy() 函数计算出来的。这两个函数分别返回投影向量(在我们的情况下只是纹理坐标的一个矢量)相对于 x 方向和 y 方向的导数。textureProjGrad() 函数然后从采样器中获取 2D 纹理,并将纹理坐标、投影向量和导数值作为参数传递。

注意事项

  • textureProjGrad() 函数没有默认的纹理过滤器和边界环绕方式,需要在使用之前手动指定。

  • textureProjGrad() 函数不支持纹理数组或立方体纹理。

  • 极性尺度,在计算导数时,有些驱动程序的精度可能不足以保证同样的渲染结果。