Échantillon (objet de texture HLSL DirectX)

Échantillonne une texture.

<Type de> modèle Object.Sample( sampler_state S, float Location [, int Offset] );

Paramètres

Élément Description
Objet
N’importe quel type d’objet de texture (à l’exception de Texture2DMS et Texture2DMSArray).
S
[in] État Sampler. Il s’agit d’un objet déclaré dans un fichier d’effet qui contient des attributions d’état.
Emplacement
[in] Coordonnées de texture. Le type d’argument dépend du type texture-objet.
type Texture-Object Type de paramètre
Texture1D float
Texture1DArray, Texture2D float2
Texture2DArray, Texture3D, TextureCube float3
TextureCubeArray float4

Compenser

[in] Décalage de coordonnées de texture facultatif, qui peut être utilisé pour n’importe quel type d’objet de texture ; le décalage est appliqué à l’emplacement avant l’échantillonnage. Les décalages de texture doivent être statiques. Le type d’argument dépend du type texture-objet. Pour plus d’informations, consultez Application de décalages de coordonnées de texture.

type Texture-Object Type de paramètre
Texture1D, Texture1DArray int
Texture2D, Texture2DArray int2
Texture3D int3
TextureCube, TextureCubeArray non pris en charge

Valeur retournée

Type de modèle de la texture, qui peut être un vecteur monocomposant ou multicomposant. Le format est basé sur la DXGI_FORMAT de la texture.

Modèle de nuanceur minimal

Cette fonction est prise en charge dans les modèles de nuanceur suivants.

vs_4_0 vs_4_1 ps_4_0 ps_4_1 gs_4_0 gs_4_1
x x
  1. TextureCubeArray est disponible dans le modèle de nuanceur 4.1 ou version ultérieure.
  2. Le modèle de nuanceur 4.1 est disponible dans Direct3D 10.1 ou version ultérieure.

Exemple

Cet exemple de code partiel est basé sur le fichier BasicHLSL11.fx dans l’exemple 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;

Notes

L’échantillonnage de texture utilise la position du texel pour rechercher une valeur de texel. Un décalage peut être appliqué à la position avant la recherche. L’état de l’échantillonneur contient les options d’échantillonnage et de filtrage. Cette méthode peut être appelée dans un nuanceur de pixels, mais elle n’est pas prise en charge dans un nuanceur de vertex ou un nuanceur de géométrie.

Utilisez un décalage uniquement à un miplevel entier ; sinon, vous pouvez obtenir des résultats différents en fonction de l’implémentation matérielle ou des paramètres du pilote.

Calcul des positions de texel

Les coordonnées de texture sont des valeurs à virgule flottante qui référencent des données de texture, également appelées espace de texture normalisé. Les modes d’habillage d’adresses sont appliqués dans cet ordre (coordonnées de texture + décalages + mode d’habillage) pour modifier les coordonnées de texture en dehors de la plage [0...1].

Pour les tableaux de textures, une valeur supplémentaire dans le paramètre location spécifie un index dans un tableau de textures. Cet index est traité comme une valeur float mise à l’échelle (au lieu de l’espace normalisé pour les coordonnées de texture standard). La conversion en index entier s’effectue dans l’ordre suivant (float + entier d’arrondi à proche le plus proche + pince à la plage de tableau).

Application de décalages de coordonnées de texture

Le paramètre offset modifie les coordonnées de texture, dans l’espace texel. Même si les coordonnées de texture sont des nombres à virgule flottante normalisées, le décalage applique un décalage entier. Notez également que les décalages de texture doivent être statiques.

Le format de données retourné est déterminé par le format de texture. Par exemple, si la ressource de texture a été définie au format DXGI_FORMAT_A8B8G8R8_UNORM_SRGB, l’opération d’échantillonnage convertit les texels échantillonnés de gamma 2.0 en 1.0, filtre et écrit le résultat sous forme de valeur à virgule flottante dans la plage [0..1].

Texture-Objet