Ejemplo (objeto de textura HLSL de DirectX)

Muestrea una textura.

<Tipo de > plantilla Object.Sample( sampler _ state S, float Location , int Offset [ ] );

Parámetros

Elemento Descripción
Objeto
Cualquier tipo de objeto de textura (excepto Texture2DMS y Texture2DMSArray).
S
[in] Un estado sampler. Se trata de un objeto declarado en un archivo de efecto que contiene asignaciones de estado.
Ubicación
[in] Coordenadas de textura. El tipo de argumento depende del tipo texture-object.
Texture-Object tipo Tipo de parámetro
Texture1D FLOAT
Texture1DArray, Texture2D float2
Texture2DArray, Texture3D, TextureCube float3
TextureCubeArray float4

Compensar

[in] Desplazamiento de coordenadas de textura opcional, que se puede usar para cualquier tipo de objeto de textura; el desplazamiento se aplica a la ubicación antes del muestreo. Los desplazamientos de textura deben ser estáticos. El tipo de argumento depende del tipo texture-object. Para obtener más información, vea Aplicar desplazamientos de coordenadas de textura.

Texture-Object tipo Tipo de parámetro
Texture1D, Texture1DArray int
Texture2D, Texture2DArray int2
Texture3D int3
TextureCube, TextureCubeArray no admitido

Valor devuelto

El tipo de plantilla de la textura, que puede ser un vector de uno o varios componentes. El formato se basa en el FORMATO DXGI de la _ textura.

Modelo mínimo de sombreador

Esta función se admite en los siguientes modelos de sombreador.

vs _ 4 _ 0 vs _ 4 _ 1 ps _ 4 _ 0 ps _ 4 _ 1 gs _ 4 _ 0 gs _ 4 _ 1
x x
  1. TextureCubeArray está disponible en Shader Model 4.1 o superior.
  2. El modelo de sombreador 4.1 está disponible en Direct3D 10.1 o superior.

Ejemplo

Este ejemplo de código parcial se basa en el archivo BasicHLSL11.fx del ejemplo 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;

Observaciones

El muestreo de textura usa la posición del texel para buscar un valor de texel. Se puede aplicar un desplazamiento a la posición antes de la búsqueda. El estado del muestreador contiene las opciones de muestreo y filtrado. Este método se puede invocar dentro de un sombreador de píxeles, pero no se admite en un sombreador de vértices o un sombreador de geometría.

Use un desplazamiento solo en un valor miplevel entero; De lo contrario, puede obtener resultados diferentes en función de la implementación de hardware o la configuración del controlador.

Cálculo de posiciones de texel

Las coordenadas de textura son valores de punto flotante que hacen referencia a los datos de textura, lo que también se conoce como espacio de textura normalizado. Los modos de ajuste de direcciones se aplican en este orden (coordenadas de textura + desplazamientos + modo de ajuste) para modificar las coordenadas de textura fuera del [ intervalo 0...1. ]

En el caso de las matrices de texturas, un valor adicional en el parámetro location especifica un índice en una matriz de textura. Este índice se trata como un valor float escalado (en lugar del espacio normalizado para las coordenadas de textura estándar). La conversión a un índice entero se realiza en el orden siguiente (float + entero round-to-nearest-even + fijación al intervalo de matriz).

Aplicar desplazamientos de coordenadas de textura

El parámetro offset modifica las coordenadas de textura, en el espacio de textura. Aunque las coordenadas de textura son números de punto flotante normalizados, el desplazamiento aplica un desplazamiento entero. Tenga en cuenta también que los desplazamientos de textura deben ser estáticos.

El formato de datos devuelto viene determinado por el formato de textura. Por ejemplo, si el recurso de textura se definió con el formato DXGI FORMAT A8B8G8R8 UNORM SRGB, la operación de muestreo convierte los texeles muestreados de _ _ gamma _ _ 2.0 a 1.0, filtra y escribe el resultado como un valor de punto flotante en el [ intervalo 0..1 ] .

Texture-Object