Ejemplo (objeto de textura HLSL de DirectX)

Muestra una textura.

<Template Type> 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 de objeto de textura.
tipo de Texture-Object 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 de objeto de textura. Para obtener más información, consulta Aplicar desplazamientos de coordenadas de textura.

tipo de Texture-Object 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 la DXGI_FORMAT de la textura.

Modelo de sombreador mínimo

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 el modelo de sombreador 4.1 o superior.
  2. El modelo de sombreador 4.1 está disponible en Direct3D 10.1 o versiones posteriores.

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 texturas usa la posición del elemento de textura para buscar un valor de textura. Se puede aplicar un desplazamiento a la posición antes de la búsqueda. El estado del sampler 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 ni en un sombreador de geometría.

Utilice un desplazamiento solo en un 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 elementos de textura

Las coordenadas de textura son valores de punto flotante que hacen referencia a 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 texturas. Este índice se trata como un valor flotante escalado (en lugar del espacio normalizado para las coordenadas de textura estándar). La conversión a un índice entero se realiza en el siguiente orden (float + round-to-near-even- integer + clamp en el intervalo de matriz).

Aplicación de desplazamientos de coordenadas de textura

El parámetro offset modifica las coordenadas de textura, en el espacio de elementos 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 elementos de textura muestreados de gamma 2.0 a 1.0, filtro y escribe el resultado como un valor de punto flotante en el intervalo [0..1].

Texture-Object