Freigeben über


texcoord – ps

Interpretiert Texturkoordinatendaten (UVW1) als Farbdaten (RGBA).

Syntax

texcoord dst

 

where

  • dst ist das Zielregister.

Bemerkungen

Pixelshaderversionen 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texcoord x x x

 

Diese Anweisung interpretiert den Texturkoordinatensatz (UVW1), der der Zielregisternummer entspricht, als Farbdaten (RGBA). Wenn der Texturkoordinatensatz weniger als drei Komponenten enthält, werden die fehlenden Komponenten auf 0 festgelegt. Die vierte Komponente ist immer auf 1 festgelegt. Alle Werte werden zwischen 0 und 1 eingespannt.

Der Vorteil von texcoord besteht darin, dass es eine Möglichkeit bietet, Mit hoher Genauigkeit interpolierte Vertexdaten direkt an den Pixelshader zu übergeben. Wenn die Daten jedoch in das Zielregister geschrieben werden, geht eine gewisse Genauigkeit verloren, abhängig von der Anzahl der Bits, die von der Hardware für Register verwendet werden.

Diese Anweisung enthält keine Textur. Nur Texturkoordinaten, die in dieser Texturphase festgelegt sind, sind relevant.

Alle Texturdaten (z. B. Position, Normal und Lichtquellenrichtung) können von einem Vertexshader in einer Texturkoordinate zugeordnet werden. Dies erfolgt durch Zuordnen einer Textur zu einem Texturregister mithilfe von SetTexture und durch Angeben, wie die Textursampling mit SetTextureStageState durchgeführt wird. Wenn die Pipeline für feste Funktionen verwendet wird, stellen Sie sicher, dass Sie das flag TSS_TEXCOORDINDEX angeben.

Diese Anweisung wird wie folgt verwendet:

texcoord tn

Ein Texturkoordinatenregister (tn) enthält vier Farbwerte (RGBA). Die Daten können auch als Vektordaten (xyzw) betrachtet werden. texcoord ruft drei dieser Werte (xyz) aus dem Texturkoordinatensatz x ab, und die vierte Komponente (w) ist auf 1 festgelegt. Die Texturadresse wird aus dem Texturkoordinatensatz n kopiert. Das Ergebnis wird zwischen 0 und 1 eingespannt.

Dieses Beispiel dient nur zur Veranschaulichung. Der C-Code, der den Shader begleitet, wurde nicht für die Leistung optimiert.

Hier sehen Sie ein Beispiel für einen Shader mit texcoord.

ps_1_1        ; version instruction
texcoord t0   ; declare t0 hold texture coordinates, 
              ; which represent rgba values in this example
mov r0, t0    ; move the color in t0 to output register r0

Die gerenderte Ausgabe des Pixelshaders ist in der folgenden Abbildung dargestellt. Die Koordinatenwerte (u,v,w,1) werden den (RGB-Kanälen) zugeordnet. Der Alphakanal ist auf 1 festgelegt. An den Ecken der Abbildung wird die Koordinate (0,0,0,1) als schwarz interpretiert; (1,0,0,1) ist rot; (0,1,0,1) ist grün; und (1,1,0,1) enthält Grün und Rot, sodass Gelb erzeugt wird.

Abbildung der gerenderten Ausgabe des Beispielpixelshaders

Für die Verwendung dieses Shaders ist zusätzlicher Code erforderlich, und ein Beispielszenario wird unten gezeigt.

// This code creates the shader from a file. The contents of  
// the shader file can also be supplied as a text string.
LPD3DXBUFFER        pCode;

// Assemble the vertex shader from the file
D3DXAssembleShaderFromFile(strPShaderPath, 0, NULL, &pCode, NULL);
m_pd3dDevice->CreatePixelShader((DWORD*)pCode->GetBufferPointer(),
                   &m_hPixelShader);
pCode->Release();

// This code defines the object vertex data
struct CUSTOMVERTEX
{
    FLOAT x, y, z;
    FLOAT tu1, tv1;
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1|TEXCOORD2(0))

static CUSTOMVERTEX g_Vertices[]=
{
    //  x      y     z     u1    v1   
    { -1.0f, -1.0f, 0.0f, 0.0f, 0.0f, },
    { +1.0f, -1.0f, 0.0f, 1.0f, 0.0f, },
    { +1.0f, +1.0f, 0.0f, 1.0f, 1.0f, },
    { -1.0f, +1.0f, 0.0f, 0.0f, 1.0f, },
};

Pixelshaderanweisungen