示例 (DirectX HLSL Texture Object)

示例纹理。

<模板类型 > 对象。示例 ( 取样器 _ 状态 S,float Location [ ,int Offset ] ) ;

参数

项目 说明
对象
除 Texture2DMS 和 Texture2DMSArray) 之外 的任何纹理对象 类型 (。

采样器状态。 这是在影响文件中声明的对象,其中包含状态分配。
位置
中纹理坐标。 参数类型依赖于纹理对象类型。
Texture-Object 类型 参数类型
Texture1D FLOAT
Texture1DArray, Texture2D float2
Texture2DArray, Texture3D, TextureCube float3
TextureCubeArray float4

抵销

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

Texture-Object 类型 参数类型
Texture1D, Texture1DArray int
Texture2D, Texture2DArray int2
Texture3D int3
TextureCube, TextureCubeArray 不支持

返回值

纹理的模板类型,可以是单组件或多组件向量。 格式基于纹理的 DXGI _ 格式

最小着色器模型

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

vs _ 4 _ 0 vs _ 4 _ 1 ps _ 4 _ 0 ps _ 4 _ 1 gs _ 4 _ 0 gs _ 4 _ 1
x x
  1. TextureCubeArray 在着色器模型4.1 或更高版本中可用。
  2. 在 Direct3D 10.1 或更高版本中提供着色器模型4.1。

示例

此部分代码示例基于 BasicHLSL11 示例中的 BasicHLSL11 文件。

// 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;

备注

纹理采样使用纹素位置查找纹素值。 偏移量可以应用于查找之前的位置。 采样器状态包含采样和筛选选项。 可以在像素着色器中调用此方法,但不支持在顶点着色器或几何着色器中调用此方法。

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

计算纹素位置

纹理坐标是引用纹理数据的浮点值,也称为规范化纹理空间。 地址换行模式按此顺序应用 (纹理坐标 + 偏移量 + 换行模式) 修改 [ 0 ... 1 范围以外的纹理坐标 ] 。

对于纹理数组,location 参数中的其他值指定纹理数组的索引。 此索引被视为 (缩放的浮点值,而不是标准纹理坐标) 的规范化空间。 按照以下顺序完成到整数索引的转换: (浮点 + 舍入到最接近的整数 + 夹具到数组范围) 。

应用纹理坐标偏移量

Offset 参数用于修改纹素空间中的纹理坐标。 即使纹理坐标为规范化浮点数,偏移量也会应用整数偏移量。 另请注意,纹理偏移量需要是静态的。

返回的数据格式由纹理格式确定。 例如,如果使用 DXGI _ 格式 _ A8B8G8R8 _ UNORM SRGB 格式定义纹理资源 _ ,则采样操作将从伽玛2.0 转换为1.0,进行筛选,然后将结果作为浮点值写入范围 [ 0 到 1 ] 。

纹理-对象