Condividi tramite


Trasformazione di proiezione

Una trasformazione di proiezione controlla gli interni della fotocamera, ad esempio la scelta di un obiettivo per una fotocamera. Questo è il più complicato dei tre tipi di trasformazione.

La matrice di proiezione è in genere una proiezione di scala e prospettiva. La trasformazione della proiezione converte il frustum di visualizzazione in una forma cuboide. Poiché l'estremità vicina del frustum di visualizzazione è più piccola rispetto all'estremità lontana, questo ha l'effetto di espandere oggetti vicini alla fotocamera; in pratica è il modo in cui la prospettiva viene applicata alla scena.

Nel frustum di visualizzazione, la distanza tra la fotocamera e l'origine dello spazio di trasformazione della visualizzazione viene definita arbitrariamente come D, quindi la matrice di proiezione è simile alla figura seguente.

illustrazione della matrice di proiezione

La matrice di visualizzazione converte la fotocamera nell'origine eseguendo la traslazione nella direzione z di - D. La matrice di traslazione è simile alla figura successiva.

illustrazione della matrice di traduzione

La moltiplicazione della matrice di traslazione per la matrice di proiezione (T*P) fornisce la matrice di proiezione composita, come illustrato nella figura seguente.

illustrazione della matrice di proiezione composita

La trasformazione prospettica converte un frustum di visualizzazione in un nuovo spazio di coordinate. Si noti che il frustum diventa cuboide e anche che l'origine si sposta dall'angolo superiore destro della scena al centro, come illustrato nel diagramma seguente.

diagramma di come la trasformazione prospettica modifica il frustum di visualizzazione in un nuovo spazio di coordinate

Nella trasformazione prospettica i limiti delle direzioni x e y sono -1 e 1. I limiti della direzione z sono 0 per il piano anteriore e 1 per il piano posteriore.

Questa matrice converte e ridimensiona gli oggetti in base a una distanza specificata dalla fotocamera al piano di ritaglio vicino, ma non considera il campo di visualizzazione (fov), pertanto i valori z prodotti per gli oggetti a distanza possono essere quasi identici, rendendo difficili i confronti di profondità. La matrice successiva risolve questi problemi e regola i vertici in modo da tenere conto delle proporzioni di aspetto della viewport, rendendola una scelta ottimale per la proiezione prospettica.

illustrazione di una matrice per la proiezione prospettica

In questa matrice, Zₙ è il valore z del piano di ritaglio vicino. Le variabili w, h e Q hanno i significati seguenti. Si noti che fovw e fovₖ rappresentano i campi orizzontali e verticali della visualizzazione, espressi in radianti.

equazioni dei significati delle variabili

Per l'applicazione, l'uso di angoli di visualizzazione per definire i coefficienti di ridimensionamento x e y potrebbe non essere utile come usare le dimensioni orizzontali e verticali della viewport (nello spazio della fotocamera). Come si evince dai calcoli, le due equazioni seguenti per w e h usano le dimensioni della viewport e sono equivalenti alle equazioni precedenti.

equazioni dei significati delle variabili w e h

In queste formule, Zₙ rappresenta la posizione del piano di ritaglio vicino e le variabili Vw e Vₕ rappresentano la larghezza e l'altezza della viewport nello spazio della fotocamera.

Qualunque formula si decida di usare, assicurarsi di impostare Zₙ su un valore il più grande possibile, perché i valori z estremamente vicini alla fotocamera non variano di molto. In questo modo, i confronti di profondità usano buffer z a 16 bit piuttosto complicati.

Matrice di proiezione w-friendly

Direct3D può usare il componente w di un vertice trasformato da matrici di mondo, visualizzazione e proiezione per eseguire calcoli basati sulla profondità in effetti di buffer di profondità o nebbia. I calcoli, ad esempio questi, richiedono che la matrice di proiezione normalizzi w per essere equivalente allo spazio globale z. In breve, se la matrice di proiezione include un coefficiente (3,4) che non è 1, è necessario ridimensionare tutti i coefficienti in base al valore inverso del coefficiente (3,4) per creare una matrice corretta. Se non si specifica una matrice conforme, gli effetti nebbia e il buffer di profondità non vengono applicati correttamente.

La figura successiva mostra una matrice di proiezione non conforme e la stessa matrice ridimensionata in modo che venga abilitata la nebbia relativa agli occhi.

illustrazioni di una matrice di proiezione non conforme e di una matrice con nebbia relativa agli occhi

Nelle matrici precedenti si presuppone che tutte le variabili siano diverse da zero. Per informazioni sul buffer di profondità basato su w, vedere Buffer di profondità.

Direct3D usa la matrice di proiezione attualmente impostata nei calcoli di profondità basati su w. Di conseguenza, le applicazioni devono impostare una matrice di proiezione conforme per ricevere le funzionalità basate su w desiderate, anche se non usano Direct3D per le trasformazioni.

Trasformazioni