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 efectos que contiene asignaciones de estado. |
||||||||||
Ubicación |
[in] Coordenadas de textura. El tipo de argumento depende del tipo de objeto de textura.
|
||||||||||
Compensar |
[in] Un 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 Aplicación de desplazamientos de coordenadas de textura.
|
Valor devuelto
El tipo de plantilla de la textura, que puede ser un vector de un solo componente o de varios componentes. El formato se basa en el 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 |
- TextureCubeArray está disponible en Shader Model 4.1 o superior.
- 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;
Comentarios
El muestreo de textura usa la posición 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 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 ni en un sombreador de geometría.
Use 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 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 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 siguiente orden (float + round-to-nearest-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 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].