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.
|
||||||||||
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.
|
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 |
- TextureCubeArray está disponível no Modelo de Sombreador 4.1 ou superior.
- 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].