texbem - ps

Applicare una trasformazione di mappa dell'ambiente fittizia. Questa operazione viene eseguita modificando i dati dell'indirizzo trama del registro di destinazione, usando i dati di perturbazione dell'indirizzo (du,dv) e una matrice di ambiente di urto 2D.

Sintassi

texbem dst, src

 

dove

  • dst è il registro di destinazione.
  • src è un registro di origine.

Commenti

Versioni di Pixel shader 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texbem x x x

 

I dati di colore rosso e verde nel registro src sono interpretati come dati di perturbazione (du,dv).

Questa istruzione trasforma i componenti rossi e verdi nel registro di origine usando la matrice di mapping dell'ambiente 2D. Il risultato viene aggiunto al set di coordinate della trama corrispondente al numero di registro di destinazione e viene usato per campionire la fase corrente della trama.

Questa operazione interpreta sempre du e dv come quantità firmata. Per le versioni 1_0 e 1_1, il modificatore di input di scalabilità con registrazione di origine ( _bx2) non è consentito nell'argomento di input.

Questa istruzione produce risultati definiti quando le trame di input contengono dati di formato firmati. I dati di formato misto funzionano solo se i primi due canali contengono dati firmati. Per altre informazioni sui formati di superficie, vedere D3DFORMAT.

Questo può essere usato per una varietà di tecniche basate sulla perturbazione degli indirizzi, tra cui il mapping dell'ambiente per pixel falso e l'illuminazione diffusa (mapping di urto).

Quando si usa questa istruzione, i registri delle trame devono seguire la sequenza seguente.

// The texture assigned to stage t(n) contains the (du,dv) data
// The texture assigned to stage t(m) is sampled
tex     t(n)                    
texbem  t(m),  t(n)      where m > n

I calcoli eseguiti all'interno dell'istruzione sono riportati di seguito.

// 1. New values for texture addresses (u',v') are calculated
// 2. Sample the texture using (u',v')

u' = TextureCoordinates(stage m)u + D3DTSS_BUMPENVMAT00(stage m)*t(n)R + D3DTSS_BUMPENVMAT10(stage m)*t(n)G v' = TextureCoordinates(stage m)v + D3DTSS_BUMPENVMAT01(stage m)*t(n)R + D3DTSS_BUMPENVMAT11(stage m)*t(n)G t(m)RGBA = TextureSample(stage m)

using (u',v') as coordinate

Registrare i dati letti da un texbem - ps o texbeml - l'istruzione ps non può essere letto in un secondo momento, tranne da un altro texbem - ps o texbeml - ps.

// This example demonstrates the validation error caused by t0 being reread:
ps_1_1
tex t0
texbem t1, t0
add r0, t1, t0

(Instruction Error) (Statement 4) Register data that has been read by 
texbem or texbeml instruction cannot be read by other instructions

Esempio

Ecco un esempio di shader con le mappe di trama identificate e le fasi della trama identificate.

ps_1_1
tex t0              ; Define t0 to get a 2-tuple DuDv
texbem t1, t0       ; Compute (u',v')
                    ; Sample t1 using (u',v')
mov r0, t1          ; Output result

texbem richiede le trame seguenti nelle fasi di trama seguenti.

  • La fase 0 viene assegnata una mappa d'urto con dati di perturbazione (du, dv).
  • La fase 1 usa una mappa trama con i dati dei colori.
  • Questa istruzione imposta i dati matrice nella fase di trama campionati.
  • Ciò è diverso dalla funzionalità della pipeline di funzione fissa in cui i dati di perturbazione e le matrici occupano la stessa fase di trama.

Istruzioni sul pixel shader