Condividi tramite


Trasformazioni coordinate trama (Direct3D 9)

I dispositivi Direct3D possono trasformare le coordinate della trama per i vertici applicando una matrice 4x4. Il sistema applica trasformazioni alle coordinate delle trame nello stesso modo della geometria. Qualsiasi trasformazione (scala, rotazione, traslazione, proiezione, taglio o qualsiasi combinazione di queste) può essere eseguita con una matrice 4x4.

Nota

Direct3D non modifica i vertici trasformati e illuminati. Di conseguenza, un'applicazione che usa vertici trasformati e illuminati non può usare Direct3D per trasformare le coordinate della trama dei vertici.

 

I dispositivi che supportano operazioni di trasformazione e illuminazione accelerate hardware (T&L HAL Device) accelerano anche la trasformazione delle coordinate delle trame. Quando l'accelerazione hardware delle trasformazioni non è disponibile, le ottimizzazioni specifiche della piattaforma nella pipeline geometry Direct3D si applicano alle trasformazioni delle coordinate delle trame.

Le trasformazioni delle coordinate delle trame sono utili per produrre effetti speciali evitando la necessità di modificare direttamente le coordinate della trama della geometria. È possibile usare matrici di traslazione o rotazione semplici per animare trame su un oggetto oppure trasformare le coordinate delle trame generate automaticamente da Direct3D per semplificare e forse accelerare effetti avanzati, ad esempio trame proiettate e mapping dinamico della luce. Inoltre, è possibile usare le trasformazioni delle coordinate delle trame per riutilizzare un singolo set di coordinate di trama per più scopi, in più fasi della trama.

Impostazione e recupero delle trasformazioni delle coordinate delle trame

Analogamente alle matrici usate dall'applicazione per la geometria, è possibile impostare e recuperare le trasformazioni delle coordinate delle trame chiamando i metodi IDirect3DDevice9::SetTransform e IDirect3DDevice9::GetTransform. Questi metodi accettano la D3DTS_TEXTURE0 tramite D3DTS_TEXTURE7 membri del tipo enumerato D3DTRANSFORMSTATETYPE per identificare rispettivamente le matrici di trasformazione per le fasi della trama da 0 a 7.

Il codice seguente imposta una matrice da applicare alle coordinate della trama per la fase di trama 0.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

D3DMATRIX matTrans = D3DXMatrixIdentity( NULL );

// Set up the matrix for the desired transformation.
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matTrans );

Abilitazione delle trasformazioni delle coordinate delle trame

Lo stato della fase D3DTSS_TEXTURETRANSFORMFLAGS trama controlla l'applicazione delle trasformazioni delle coordinate della trama. I valori per questo stato della fase della trama sono definiti dal tipo enumerato D3DTEXTURETRANSFORMFLAGS.

Le trasformazioni delle coordinate della trama vengono disabilitate quando D3DTSS_TEXTURETRANSFORMFLAGS è impostato su D3DTTFF_DISABLE (valore predefinito). Supponendo che le trasformazioni delle coordinate della trama siano state abilitate per la fase 0, il codice seguente li disabilita.

// For this example, assume the d3dDevice variable contains a 
// valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_DISABLE );

Gli altri valori definiti in D3DTEXTURETRANSFORMFLAGS vengono usati per abilitare le trasformazioni delle coordinate della trama e per controllare il numero di elementi delle coordinate della trama risultanti passati al rasterizzatore. Ad esempio, prendere il codice seguente.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT2 );

Il valore D3DTTFF_COUNT2 indica al sistema di applicare il set di matrici di trasformazione per la fase 0 della trama e quindi passare i primi due elementi delle coordinate della trama modificata al rasterizzatore.

Il flag di trasformazione trama D3DTTFF_PROJECTED indica le coordinate per una trama proiettata. Quando si specifica questo flag, il rasterizzatore divide gli elementi passati per l'ultimo elemento. Ad esempio, prendere il codice seguente.

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );

Questo esempio informa il sistema di passare tre elementi di coordinate trama al rasterizzatore. Il rasterizzatore divide i primi due elementi per il terzo, producendo le coordinate della trama 2D necessarie per affrontare la trama.

Elaborazione delle coordinate delle trame