Condividi tramite


texcoord - ps

Interpreta i dati delle coordinate delle trame (UVW1) come dati di colore (RGBA).

Sintassi

texcoord dst

 

dove

  • dst è il registro di destinazione.

Commenti

Versioni del pixel shader 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texcoord x x x

 

Questa istruzione interpreta il set di coordinate della trama (UVW1) corrispondente al numero di registro di destinazione come dati di colore (RGBA). Se il set di coordinate della trama contiene meno di tre componenti, i componenti mancanti vengono impostati su 0. Il quarto componente è sempre impostato su 1. Tutti i valori sono bloccati tra 0 e 1.

Il vantaggio di texcoord è che consente di passare i dati dei vertici interpolati a precisione elevata direttamente nel pixel shader. Tuttavia, quando i dati vengono scritti nel registro di destinazione, alcune precisioni andranno perse, a seconda del numero di bit usati dall'hardware per i registri.

Nessuna trama campionata da questa istruzione. Sono rilevanti solo le coordinate della trama impostate in questa fase della trama.

Qualsiasi dato di trama(ad esempio posizione, normale e direzione sorgente luminosa) può essere mappato da un vertex shader in una coordinata di trama. Questa operazione viene eseguita associando una trama a un registro di trama usando SetTexture e specificando come viene eseguito il campionamento delle trame usando SetTextureStageState. Se viene usata la pipeline di funzioni fisse, assicurarsi di specificare il flag di TSS_TEXCOORDINDEX.

Questa istruzione viene usata come segue:

texcoord tn

Un registro coordinate trama (tn) contiene quattro valori di colore (RGBA). I dati possono anche essere considerati come dati vettoriali (xyzw). texcoord recupererà tre di questi valori (xyz) dal set di coordinate della trama x e il quarto componente (w) è impostato su 1. L'indirizzo della trama viene copiato dal set di coordinate della trama n. Il risultato è bloccato tra 0 e 1.

Questo esempio viene utilizzato solo a scopo illustrativo. Il codice C che accompagna lo shader non è stato ottimizzato per le prestazioni.

Ecco un esempio di shader che usa 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

L'output di cui è stato eseguito il rendering dal pixel shader è illustrato nella figura seguente. I valori delle coordinate (u,v,w,1) eseguono il mapping ai canali (rgb). Il canale alfa è impostato su 1. Agli angoli dell'illustrazione, la coordinata (0,0,0,1) viene interpretata come nera; (1.0.0,1) è rosso; (0,1,0,1) è verde; e (1,1,0,1) contiene verde e rosso, producendo giallo.

illustrazione dell'output sottoposto a rendering del pixel shader di esempio

Per usare questo shader è necessario codice aggiuntivo e di seguito è illustrato uno scenario di esempio.

// 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, },
};

Istruzioni per pixel shader