Exemplo (objeto de textura DirectX HLSL)

Amostra uma textura.

<Template Type> Object.Sample( sampler_state S, float Location [, int Offset] );

Parâmetros

Item Descrição
Objeto
Qualquer tipo de objeto de textura (exceto Texture2DMS e Texture2DMSArray).
S
[in] Um estado sampler. Esse é um objeto declarado em um arquivo de efeito que contém atribuições de estado.
Localização
[in] As coordenadas de textura. O tipo de argumento depende do tipo de objeto de textura.
Tipo de Texture-Object Tipo de parâmetro
Texture1D FLOAT
Texture1DArray, Texture2D float2
Texture2DArray, Texture3D, TextureCube float3
TextureCubeArray float4

Deslocamento

[in] Um deslocamento de coordenada de textura opcional, que pode ser usado para qualquer tipo de objeto de textura; o deslocamento é aplicado ao local antes da amostragem. Os deslocamentos de textura precisam ser estáticos. O tipo de argumento depende do tipo de objeto de textura. Para obter mais informações, consulte Aplicando deslocamentos de coordenadas de textura.

Tipo de Texture-Object Tipo de parâmetro
Texture1D, Texture1DArray INT
Texture2D, Texture2DArray int2
Texture3D int3
TextureCube, TextureCubeArray sem suporte

Valor retornado

O tipo de modelo da textura, que pode ser um vetor de componente único ou multicomponentes. O formato é baseado no DXGI_FORMAT da textura.

Modelo de sombreador mínimo

Essa função tem suporte nos modelos de sombreador a seguir.

vs_4_0 vs_4_1 ps_4_0 ps_4_1 gs_4_0 gs_4_1
x x
  1. TextureCubeArray está disponível no Modelo de Sombreador 4.1 ou superior.
  2. O Modelo de Sombreador 4.1 está disponível no Direct3D 10.1 ou superior.

Exemplo

Este exemplo de código parcial baseia-se no arquivo BasicHLSL11.fx no exemplo 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;

Comentários

A amostragem de textura usa a posição texel para pesquisar um valor texel. Um deslocamento pode ser aplicado à posição antes da pesquisa. O estado do sampler contém as opções de amostragem e filtragem. Esse método pode ser invocado dentro de um sombreador de pixel, mas não tem suporte em um sombreador de vértice ou em um sombreador de geometria.

Use um deslocamento somente em um miplevel inteiro; caso contrário, você poderá obter resultados diferentes dependendo da implementação de hardware ou das configurações do driver.

Calculando posições texel

As coordenadas de textura são valores de ponto flutuante que fazem referência a dados de textura, que também são conhecidos como espaço de textura normalizado. Os modos de disposição de endereço são aplicados nessa ordem (coordenadas de textura + deslocamentos + modo de encapsulamento) para modificar coordenadas de textura fora do intervalo [0...1].

Para matrizes de textura, um valor adicional no parâmetro location especifica um índice em uma matriz de textura. Esse índice é tratado como um valor float dimensionado (em vez do espaço normalizado para coordenadas de textura padrão). A conversão em um índice inteiro é feita na seguinte ordem (float + inteiro de volta para mais próximo + pinçagem para o intervalo de matriz).

Aplicando deslocamentos de coordenadas de textura

O parâmetro offset modifica as coordenadas de textura, no espaço texel. Embora as coordenadas de textura sejam números de ponto flutuante normalizados, o deslocamento aplica um deslocamento inteiro. Observe também que os deslocamentos de textura precisam ser estáticos.

O formato de dados retornado é determinado pelo formato de textura. Por exemplo, se o recurso de textura foi definido com o formato DXGI_FORMAT_A8B8G8R8_UNORM_SRGB, a operação de amostragem converte texels amostrados de gama 2.0 para 1.0, filtra e grava o resultado como um valor de ponto flutuante no intervalo [0..1].

Objeto Texture