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 di visualizzazione in un'applicazione Direct3D.

La trasformazione della vista individua il visualizzatore nello spazio mondiale, 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. Ricorda che Direct3D usa un sistema di coordinate sinistro, 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 mondiale che viene usato 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, in cui la fotocamera si trova all'origine. Un modo per creare una matrice di visualizzazione consiste nel combinare una matrice di traduzione con matrici di rotazione per ogni asse. In questo approccio si applica l'equazione di matrice generale seguente.

equazione della trasformazione della visualizzazione

In questa formula, V è la matrice di visualizzazione creata, T è una matrice di traduzione 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 traduzione e rotazione si basano sulla posizione logica e sull'orientamento della fotocamera nello spazio mondiale. Quindi, se la posizione logica della fotocamera nel mondo è <10.20.100, lo scopo della matrice di traduzione è 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 si basano sull'orientamento della fotocamera, in termini di quanto gli assi dello spazio della fotocamera vengono ruotati fuori allineamento con lo spazio mondiale. Ad esempio, se la fotocamera menzionata in precedenza punta dritta, l'asse z è di 90 gradi (pi/2 radianti) fuori allineamento con l'asse z dello spazio mondiale, come illustrato nella figura seguente.

illustrazione dello spazio di visualizzazione della fotocamera rispetto allo spazio mondiale

Le matrici di rotazione applicano rotazioni uguali, ma opposte, di grandezza ai 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 traduzione per creare una matrice di visualizzazione che regola la posizione e l'orientamento degli oggetti nella scena in modo che la loro parte superiore si trova davanti alla fotocamera, dando l'aspetto che la fotocamera è sopra il modello.

Configurazione di una matrice di visualizzazione

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

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

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

Direct3D usa le matrici di visualizzazione e del mondo per configurare diverse strutture di dati interne. Ogni volta che si imposta una nuova matrice di mondo o visualizzazione, il sistema ricalcolate le strutture interne associate. L'impostazione di queste matrici spesso richiede molto tempo. È possibile ridurre al minimo il numero di calcoli necessari concatenando le matrici del mondo e di visualizzazione in una matrice di visualizzazione mondiale impostata come matrice mondiale 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 mondiale in base alle esigenze. Per chiarezza, gli esempi usano raramente questa ottimizzazione.

Trasformazioni