Esempio (oggetto trama DirectX HLSL)

Campiona una trama.

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

Parametri

Elemento Descrizione
Oggetto
Qualsiasi tipo di oggetto trama (ad eccezione di Texture2DMS e Texture2DMSArray).
S
[in] Stato sampler. Si tratta di un oggetto dichiarato in un file di effetto che contiene assegnazioni di stato.
Posizione
[in] Coordinate della trama. Il tipo di argomento dipende dal tipo di oggetto trama.
tipo Texture-Object Tipo di parametro
Texture1D float
Texture1DArray, Texture2D float2
Texture2DArray, Texture3D, TextureCube float3
TextureCubeArray float4

Compensare

[in] Offset di coordinate di trama facoltativo, che può essere usato per qualsiasi tipo di oggetto trama; l'offset viene applicato alla posizione prima del campionamento. Gli offset di trama devono essere statici. Il tipo di argomento dipende dal tipo di oggetto trama. Per altre info, vedi Applicazione degli offset delle coordinate della trama.

tipo Texture-Object Tipo di parametro
Texture1D, Texture1DArray INT
Texture2D, Texture2DArray int2
Texture3D int3
TextureCube, TextureCubeArray non supportato

Valore restituito

Tipo di modello della trama, che può essere un vettore a singolo o multi-componente. Il formato si basa sulla DXGI_FORMAT della trama.

Modello minimo shader

Questa funzione è supportata nei modelli di shader seguenti.

vs_4_0 vs_4_1 ps_4_0 ps_4_1 gs_4_0 gs_4_1
x x
  1. TextureCubeArray è disponibile nel modello shader 4.1 o versione successiva.
  2. Il modello shader 4.1 è disponibile in Direct3D 10.1 o versione successiva.

Esempio

Questo esempio di codice parziale è basato sul file BasicHLSL11.fx nell'esempio 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;

Commenti

Il campionamento delle trame usa la posizione del texel per cercare un valore di texel. È possibile applicare un offset alla posizione prima della ricerca. Lo stato del campionatore contiene le opzioni di campionamento e filtro. Questo metodo può essere richiamato all'interno di un pixel shader, ma non è supportato in un vertex shader o in uno shader geometry.

Usa un offset solo in corrispondenza di un miplevel intero; in caso contrario, è possibile ottenere risultati diversi a seconda dell'implementazione dell'hardware o delle impostazioni del driver.

Calcolo delle posizioni del texel

Le coordinate delle trame sono valori a virgola mobile che fanno riferimento ai dati delle trame, noti anche come spazio di trama normalizzato. Le modalità di wrapping degli indirizzi vengono applicate in questo ordine (coordinate trama + offset + modalità di wrapping) per modificare le coordinate della trama all'esterno dell'intervallo [0...1].

Per le matrici di trame, un valore aggiuntivo nel parametro location specifica un indice in una matrice di trame. Questo indice viene considerato come un valore float scalato (anziché lo spazio normalizzato per le coordinate della trama standard). La conversione in un indice integer viene eseguita nell'ordine seguente (float + round-to-near-even integer + clamp nell'intervallo di matrici).

Applicazione degli offset delle coordinate della trama

Il parametro offset modifica le coordinate della trama, nello spazio texel. Anche se le coordinate della trama sono numeri a virgola mobile normalizzate, l'offset applica un offset integer. Si noti anche che gli offset delle trame devono essere statici.

Il formato dei dati restituito è determinato dal formato di trama. Ad esempio, se la risorsa trama è stata definita con il formato DXGI_FORMAT_A8B8G8R8_UNORM_SRGB, l'operazione di campionamento converte i texel campionati da gamma 2.0 a 1.0, filtra e scrive il risultato come valore a virgola mobile nell'intervallo [0..1].

Texture-Object