示例 (DirectX HLSL Texture Object)
对纹理采样。
<Template Type> Object.Sample ( sampler_state S, float Location [, int Offset] ) ;
参数
项 | 说明 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
对象 |
除 Texture2DMS 和 Texture2DMSArray 之外的任何 纹理对象 类型 () 。 |
||||||||||
S |
[in] 采样器状态。 这是在包含状态分配的效果文件中声明的对象。 |
||||||||||
位置 |
[in]纹理坐标。 参数类型依赖于纹理对象类型。
|
||||||||||
抵消 |
[in]可选的纹理坐标偏移量,可用于任何纹理对象类型;在采样之前,偏移量应用于位置。 纹理偏移量必须是静态的。 参数类型依赖于纹理对象类型。 有关详细信息,请参阅 应用纹理坐标偏移量。
|
返回值
纹理的模板类型,可以是单分量或多分量向量。 格式基于纹理的 DXGI_FORMAT。
最小着色器模型
以下着色器模型中支持此函数。
vs_4_0 | vs_4_1 | ps_4_0 | ps_4_1 | gs_4_0 | gs_4_1 |
---|---|---|---|---|---|
x | x |
- TextureCubeArray 在着色器模型 4.1 或更高版本中可用。
- 着色器模型 4.1 在 Direct3D 10.1 或更高版本中可用。
示例
此部分代码示例基于 BasicHLSL11 示例中的 BasicHLSL11.fx 文件。
// Object Declarations
Texture2D g_MeshTexture; // Color texture for mesh
SamplerState MeshTextureSampler
{
Filter = MIN_MAG_MIP_LINEAR;
AddressU = Wrap;
AddressV = Wrap;
};
struct VS_OUTPUT
{
float4 Position : SV_POSITION; // vertex position
float4 Diffuse : COLOR0; // vertex diffuse color (note that COLOR0 is clamped from 0..1)
float2 TextureUV : TEXCOORD0; // vertex texture coords
};
VS_OUTPUT In;
// Shader body calling the intrinsic function
...
Output.RGBColor = g_MeshTexture.Sample(MeshTextureSampler, In.TextureUV) * In.Diffuse;
备注
纹理采样使用纹素位置查找纹素值。 在查找之前,可对位置应用偏移量。 采样器状态包含采样和筛选选项。 此方法可以在像素着色器中调用,但在顶点着色器或几何着色器中不受支持。
仅在整数偏移量处使用偏移量;否则,可能会获得不同的结果,具体取决于硬件实现或驱动程序设置。
计算纹素位置
纹理坐标是引用纹理数据的浮点值,也称为规范化纹理空间。 地址环绕模式按此顺序应用, (纹理坐标 + 偏移量 + 环绕模式) 修改 [0...1] 范围之外的纹理坐标。
对于纹理数组,location 参数中的附加值指定纹理数组中的索引。 此索引被视为 (缩放的浮点值,而不是标准纹理坐标) 的规范化空间。 转换为整数索引的顺序如下, (float + 舍入到最接近的整数 + 固定到数组范围) 。
应用纹理坐标偏移量
offset 参数修改纹素空间中的纹理坐标。 即使纹理坐标是规范化的浮点数,偏移量也会应用整数偏移量。 另请注意,纹理偏移量必须是静态的。
返回的数据格式由纹理格式决定。 例如,如果纹理资源是使用DXGI_FORMAT_A8B8G8R8_UNORM_SRGB格式定义的,则采样操作会将采样的纹素从 gamma 2.0 转换为 1.0,筛选并将结果写入范围 [0...1] 中的浮点值。