Condividi tramite


Trasformazione visualizzazione (Direct3D 9)

Questa sezione presenta i concetti di base della trasformazione della visualizzazione e fornisce informazioni dettagliate su come configurare una matrice di trasformazione della visualizzazione in un'applicazione Direct3D.

La trasformazione di visualizzazione individua il visualizzatore nello spazio globale, trasformando i vertici nello spazio della fotocamera. Nello spazio della fotocamera, la fotocamera o il visualizzatore si trova all'origine, guardando nella direzione z positiva. Tenere presente che Direct3D usa un sistema di coordinate sinistrorso, quindi z è positivo in una scena. La matrice di visualizzazione sposta gli oggetti nel mondo intorno alla posizione di una fotocamera, l'origine dello spazio della fotocamera e l'orientamento.

Esistono molti modi per creare una matrice di visualizzazione. In tutti i casi, la fotocamera ha una posizione logica e un orientamento nello spazio globale utilizzato come punto di partenza per creare una matrice di visualizzazione che verrà applicata ai modelli in una scena. La matrice di visualizzazione converte e ruota gli oggetti per posizionarli nello spazio della fotocamera, dove la fotocamera si trova all'origine. Un modo per creare una matrice di visualizzazione consiste nel combinare una matrice di traslazione con matrici di rotazione per ogni asse. In questo approccio si applica l'equazione di matrice generale seguente.

equazione della trasformazione di visualizzazione

In questa formula V è la matrice di visualizzazione creata, T è una matrice di traslazione che riposiziona gli oggetti nel mondo e Rₓ tramite Rz sono matrici di rotazione che ruotano gli oggetti lungo l'asse x, y e z. Le matrici di traslazione e rotazione si basano sulla posizione logica e sull'orientamento della fotocamera nello spazio globale. Quindi, se la posizione logica della fotocamera nel mondo è <10.20.100>, l'obiettivo della matrice di traslazione è spostare oggetti -10 unità lungo l'asse x, -20 unità lungo l'asse y e -100 unità lungo l'asse z. Le matrici di rotazione nella formula sono basate sull'orientamento della fotocamera, in termini di quanto gli assi dello spazio della fotocamera vengono ruotati fuori allineamento con lo spazio globale. Ad esempio, se la fotocamera menzionata in precedenza punta verso il basso, l'asse z è di 90 gradi (pi/2 radianti) fuori allineamento con l'asse z dello spazio globale, come illustrato nella figura seguente.

illustrazione dello spazio di visualizzazione della fotocamera rispetto allo spazio globale

Le matrici di rotazione applicano rotazioni uguali, ma opposte, alla grandezza dei modelli nella scena. La matrice di visualizzazione per questa fotocamera include una rotazione di -90 gradi intorno all'asse x. La matrice di rotazione viene combinata con la matrice di traslazione per creare una matrice di visualizzazione che regola la posizione e l'orientamento degli oggetti nella scena in modo che la parte superiore si affaccia sulla fotocamera, dando l'aspetto che la fotocamera è sopra il modello.

Configurazione di una matrice di visualizzazione

Le D3DXMatrixLookAtLH e D3DXMatrixLookAtRH funzioni helper creano una matrice di visualizzazione in base alla posizione della fotocamera e a un punto di visualizzazione.

Nell'esempio seguente viene creata una matrice di visualizzazione per le coordinate sinistrorse.

D3DXMATRIX out;
D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtLH(&out, &eye, &at, &up);

Direct3D usa matrici di visualizzazione e mondo per configurare diverse strutture di dati interne. Ogni volta che si imposta una nuova matrice globale o di visualizzazione, il sistema ricalcola le strutture interne associate. L'impostazione di queste matrici richiede spesso tempo di calcolo. È possibile ridurre al minimo il numero di calcoli necessari concatenando le matrici del mondo e visualizzando le matrici in una matrice di visualizzazione globale impostata come matrice globale e quindi impostando la matrice di visualizzazione sull'identità. Mantenere memorizzate nella cache copie di singoli mondi e matrici di visualizzazione che è possibile modificare, concatenare e reimpostare la matrice globale in base alle esigenze. Per maggiore chiarezza, i campioni usano raramente questa ottimizzazione.

trasformazioni