É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.
|
||||||||||
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.
|
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 |
- TextureCubeArray est disponible dans le modèle de nuanceur 4.1 ou version ultérieure.
- 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].