Beispiel (DirectX HLSL-Strukturobjekt)
Probieren Sie eine Textur aus.
<Template Type > Object.Sample( sampler _ state S, float Location [ , int Offset ] );
Parameter
| Element | BESCHREIBUNG | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Objekt |
Jeder Texturobjekttyp (mit Ausnahme von Texture2DMS und Texture2DMSArray). |
||||||||||
| S |
[in] Ein Samplerzustand. Dies ist ein Objekt, das in einer Effektdatei deklariert ist, die Zustandszuweisungen enthält. |
||||||||||
| Lage |
[in] Die Texturkoordinaten. Der Argumenttyp ist vom Texturobjekttyp abhängig.
|
||||||||||
Offset |
[in] Ein optionaler Texturkoordinatenoffset, der für jeden Texturobjekttyp verwendet werden kann. Der Offset wird vor der Stichprobenentnahme auf den Speicherort angewendet. Die Texturoffsets müssen statisch sein. Der Argumenttyp ist vom Texturobjekttyp abhängig. Weitere Informationen finden Sie unter Anwenden von Texturkoordinatenoffsets.
|
Rückgabewert
Der Vorlagentyp der Textur, bei dem es sich um einen Ein- oder Mehrkomponentenvektor aussetzen kann. Das Format basiert auf dem DXGI _ FORMATder Textur.
Shader-Mindestmodell
Diese Funktion wird in den folgenden Shadermodellen unterstützt.
| Vs _ 4 _ 0 | Vs _ 4 _ 1 | ps _ 4 _ 0 | ps _ 4 _ 1 | gs _ 4 _ 0 | gs _ 4 _ 1 |
|---|---|---|---|---|---|
| x | x |
- TextureCubeArray ist im Shadermodell 4.1 oder höher verfügbar.
- Shadermodell 4.1 ist in Direct3D 10.1 oder höher verfügbar.
Beispiel
Dieses Teilcodebeispiel basiert auf der Datei BasicHLSL11.fx im BasicHLSL11-Beispiel.
// 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;
Hinweise
Textursampling verwendet die Texelposition, um einen Texelwert zu suchen. Vor der Suche kann ein Offset auf die Position angewendet werden. Der Zustand des Samplers enthält die Sampling- und Filteroptionen. Diese Methode kann innerhalb eines Pixel-Shaders aufgerufen werden, wird jedoch in einem Scheitelpunkt-Shader oder einem Geometrie-Shader nicht unterstützt.
Verwenden Sie einen Offset nur auf einem ganzzahligen miplevel. Andernfalls erhalten Sie je nach Hardwareimplementierungen oder Treibereinstellungen möglicherweise unterschiedliche Ergebnisse.
Berechnen von Texelpositionen
Texturkoordinaten sind Gleitkommawerte, die auf Texturdaten verweisen, was auch als normalisierter Texturraum bezeichnet wird. Adressumbruchmodi werden in dieser Reihenfolge angewendet (Texturkoordinaten + Offsets + Umbruchmodus), um Texturkoordinaten außerhalb des [ Bereichs 0...1 zu ] ändern.
Bei Texturarrays gibt ein zusätzlicher Wert im location-Parameter einen Index in einem Texturarray an. Dieser Index wird als skalierter float-Wert behandelt (anstelle des normalisierten Raums für Standardtexturkoordinaten). Die Konvertierung in einen ganzzahligen Index erfolgt in der folgenden Reihenfolge (float + round-to-nearest-even integer + Klammer an den Arraybereich).
Anwenden von Texturkoordinatenoffsets
Der offset-Parameter ändert die Texturkoordinaten im Texelraum. Obwohl Texturkoordinaten gleitkommazahlen normalisiert sind, wendet der Offset einen ganzzahligen Offset an. Beachten Sie auch, dass die Texturoffsets statisch sein müssen.
Das zurückgegebene Datenformat wird durch das Texturformat bestimmt. Wenn die Texturressource z. B. mit dem _ DXGI FORMAT _ A8B8G8R8 _ UNORM _ SRGB-Format definiert wurde, konvertiert der Samplingvorgang die stichprobenierten Texel von Gamma 2.0 in 1.0, filtert und schreibt das Ergebnis als Gleitkommawert im Bereich [ 0..1. ]