SampleCmp (DirectX HLSL 纹理对象)

对纹理采样并将单个组件与指定的比较值进行比较。

float Object.SampleCmp (
SamplerComparisonState S,
float Location,
float CompareValue,
[int Offset]
);
 

比较是纹理中存储的第一个分量与传递到 方法中的比较值之间的单组件比较。

只能从像素着色器调用此方法;顶点或几何图形着色器不支持它。

参数

对象

除 Texture2DMS、Texture2DMSArray 或 Texture3D) 之外,任何纹理 对象 类型 (。

S

[in]采样器比较状态,即采样器状态加上比较状态, (比较函数和比较筛选器) 。 有关详细信息和示例,请参阅 采样器类型

位置

[in]纹理坐标。 参数类型依赖于纹理对象类型。

Texture-Object类型 参数类型
Texture1D FLOAT
Texture1DArray、Texture2D float2
Texture2DArray¹、TextureCube float3
TextureCubeArray¹ float4

CompareValue

用作比较值的浮点值。

抵消

[in]可选的纹理坐标偏移量,可用于任何纹理对象类型;偏移量在采样前应用于位置。 纹理偏移量需要是静态的。 参数类型依赖于纹理对象类型。 有关详细信息,请参阅 应用纹理坐标偏移量。

Texture-Object类型 参数类型
Texture1D、Texture1DArray int
Texture2D、Texture2DArray¹ int2
TextureCube、TextureCubeArray¹ 不支持

返回值

返回 [0..1] 范围内的浮点值。

对于基于筛选模式) 采样器配置提取的每个纹素 (,如果比较通过, SampleCmp 将从着色器 (输入) 的第 3 个分量与纹素值 (1 进行比较;否则为 0) 。 然后,SampleCmp 将每个纹素的这些 0 和 1 结果混合在一起,如在普通纹理筛选中 (不是平均) ,并将生成的 [0..1] 值返回到着色器。

备注

比较筛选提供了一种基本筛选操作,该操作对百分比更近深度筛选很有用。

在浮点资源 (使用此方法时,比较值不会自动固定在 0.0 到 1.0 之间,而不是) 带符号规范化或无符号规范化格式。 因此,对于常见的阴影技术,可能需要手动固定比较值。

仅在整数错误位处使用偏移量;否则,可能会获得不同的结果,具体取决于硬件实现或驱动程序设置。

最小着色器模型

以下着色器模型中支持此函数。

vs_4_0 vs_4_1² ps_4_0 ps_4_1² gs_4_0 gs_4_1²
x
  1. Texture2DArray 和 TextureCubeArray 在着色器模型 4.1 或更高版本中可用。
  2. 着色器模型 4.1 在 Direct3D 10.1 或更高版本中可用。

注意

使用为 Direct3D 功能级别 9 实现阴影缓冲区中所述的技术时,在 ps 4_0_level_9_1 和 4_0_level_9_3 中也提供了 SampleCmp

Texture-Object