Perché ?
Perché, una fotocamera rappresenta una vista di proiezione.
Ma nel caso di 3D Camera (Virtual Camera), la telecamera si sposta invece del mondo. Ho fatto una spiegazione dettagliata più avanti di questa risposta.
Comprensione matematica
La vista di proiezione si sposta nello spazio e ne modifica l'orientamento. La prima cosa da notare è che la proiezione desiderata sullo schermo non cambia con la direzione della vista.
Per questo motivo, trasformiamo altre cose per ottenere la proiezione desiderata.
Comprensione da http://opengl.org
Per dare l'impressione di muovere la videocamera, l'applicazione OpenGL deve spostare la scena con l'inverso della trasformazione della videocamera. per quanto riguarda OpenGL, non esiste una videocamera. Più specificamente, la fotocamera si trova sempre sulla coordinata dello spazio oculare (0, 0, 0)
Comprensione da http://open.gl
Desidera inoltre condividere le seguenti righe dalla sezione Matrice vista di http://open.gl/transformations
Per simulare una trasformazione della telecamera, devi effettivamente trasformare il mondo con l'inverso di quella trasformazione. Esempio: se si desidera spostare la telecamera verso l'alto, è necessario spostare il mondo verso il basso.
Comprensione per prospettiva
Nel mondo reale, vediamo le cose in un modo che si chiama "prospettiva".
La prospettiva si riferisce al concetto secondo cui gli oggetti più lontani sembrano essere più piccoli di quelli più vicini a te. Prospettiva significa anche che se sei seduto nel mezzo di una strada diritta, in realtà vedi i bordi della strada come due linee convergenti.
Questa è prospettiva. La prospettiva è fondamentale nei progetti 3D. Senza prospettiva, il mondo 3D non sembra reale.
Mentre questo può sembrare naturale e ovvio, è importante considerare che quando si crea un rendering 3D su un computer si sta tentando di simulare un mondo 3D sullo schermo del computer, che è una superficie 2D.
Immagina che dietro lo schermo del computer ci sia una sorta di scena 3D reale, e lo stai guardando attraverso il "vetro" dello schermo del tuo computer. Usando la prospettiva, il tuo obiettivo è creare un codice che renda ciò che viene "proiettato" su questo "vetro" del tuo schermo come se ci fosse questo vero mondo 3D dietro lo schermo. L'unica avvertenza è che questo mondo 3D non è reale ... è solo una simulazione matematica di un mondo 3D.
Quindi, quando si utilizza il rendering 3D per simulare una scena in 3D e quindi proiettare la scena 3D sulla superficie 2D dello schermo, il processo si chiama proiezione prospettica.
Inizia immaginando intuitivamente ciò che vuoi ottenere. Se un oggetto è più vicino al visualizzatore, l'oggetto deve apparire più grande. Se l'oggetto è più lontano, deve apparire più piccolo. Inoltre, se un oggetto si allontana dallo spettatore, in linea retta, si desidera che converga verso il centro dello schermo, man mano che si allontana in lontananza.
Tradurre la prospettiva in matematica
Mentre vedi l'illustrazione nella figura seguente, immagina che un oggetto sia posizionato nella tua scena 3D. Nel mondo 3D, la posizione dell'oggetto può essere descritta come xW, yW, zW, facendo riferimento a un sistema di coordinate 3D con l'origine nel punto dell'occhio. Ecco dove l'oggetto è effettivamente posizionato, nella scena 3D oltre lo schermo.
Mentre lo spettatore guarda questo oggetto sullo schermo, l'oggetto 3D viene "proiettato" su una posizione 2D descritta come xP e yP, che fa riferimento al sistema di coordinate 2D dello schermo (piano di proiezione).
Per mettere questi valori in una formula matematica, userò un sistema di coordinate 3D per le coordinate del mondo, in cui l'asse x punta a destra, punti y in alto e punti z positivi all'interno dello schermo. L'origine 3D si riferisce alla posizione dell'occhio dello spettatore. Quindi, il vetro dello schermo si trova su un piano ortogonale (ad angolo retto) rispetto all'asse z, a qualche z che chiamerò zProj.
È possibile calcolare le posizioni proiettate xP e yP, dividendo le posizioni mondiali xW e yW, per zW, in questo modo:
xP = K1 * xW / zW
yP = K2 * yW / zW
K1 e K2 sono costanti che derivano da fattori geometrici come le proporzioni del piano di proiezione (il tuo viewport) e il "campo visivo" dell'occhio, che tiene conto del grado di visione grandangolare.
Puoi vedere come questa trasformazione simula la prospettiva. I punti vicino ai lati dello schermo vengono spinti verso il centro all'aumentare della distanza dall'occhio (zW). Allo stesso tempo, i punti più vicini al centro (0,0) sono molto meno influenzati dalla distanza dall'occhio e rimangono vicini al centro.
Questa divisione per z è il famoso "divario prospettico".
Ora, considera che un oggetto nella scena 3D è definito come una serie di vertici. Quindi, applicando questo tipo di trasformazione a tutti i vertici della geometria, si garantisce in modo efficace che l'oggetto si riduca quando è più lontano dal punto di vista.
Altri casi importanti
- Nel caso di 3D Camera (Virtual Camera), la telecamera si sposta invece del mondo.
Per comprendere meglio le telecamere 3D, immagina di girare un film. Devi creare una scena che vuoi girare e hai bisogno di una macchina fotografica. Per ottenere il filmato, vagherai attraverso la scena con la tua fotocamera, riprendendo gli oggetti nella scena da diverse angolazioni e punti di vista.
Lo stesso processo di ripresa si verifica con una videocamera 3D. Hai bisogno di una fotocamera "virtuale", che può vagare per la scena "virtuale" che hai creato.
Due stili di ripresa popolari includono guardare il mondo attraverso gli occhi di un personaggio (noto anche come videocamera in prima persona) o puntare la fotocamera su un personaggio e tenerlo in vista (noto come videocamera in terza persona).
Questa è la premessa di base di una videocamera 3D: una videocamera virtuale che è possibile utilizzare per spostarsi all'interno di una scena 3D e rendere il filmato da un punto di vista specifico.
Comprensione dello spazio mondiale e visualizzazione dello spazio
Per codificare questo tipo di comportamento, renderai i contenuti del mondo 3D dal punto di vista della telecamera, non solo dal punto di vista del sistema di coordinate del mondo, o da un altro punto di vista fisso.
In generale, una scena 3D contiene una serie di modelli 3D. I modelli sono definiti come un insieme di vertici e triangoli, riferiti al proprio sistema di coordinate. Lo spazio in cui sono definiti i modelli è chiamato spazio modello (o locale).
Dopo aver posizionato gli oggetti del modello in una scena 3D, trasformerai i vertici di questi modelli usando una matrice di "trasformazione del mondo". Ogni oggetto ha la sua matrice mondiale che definisce dove si trova l'oggetto nel mondo e come è orientato.
Questo nuovo sistema di riferimento è chiamato "spazio mondiale" (o spazio globale). Un modo semplice per gestirlo è associare una matrice di trasformazione del mondo a ciascun oggetto.
Per implementare il comportamento di una videocamera 3D, è necessario eseguire passaggi aggiuntivi. Farai riferimento al mondo, non all'origine mondiale, ma al sistema di riferimento della stessa videocamera 3D.
Una buona strategia prevede il trattamento della fotocamera come un vero oggetto 3D nel mondo 3D. Come qualsiasi altro oggetto 3D, usi una matrice di "trasformazione del mondo" per posizionare la telecamera nella posizione e nell'orientamento desiderati nel mondo 3D. Questa matrice di trasformazione del mondo della telecamera trasforma l'oggetto della telecamera dall'originale, guardando in avanti la rotazione (lungo l'asse z), nella posizione del mondo reale (xc, yc, zc) e nella rotazione del mondo.
La figura seguente mostra le relazioni tra il sistema di coordinate World (x, y, z) e il sistema di coordinate View (camera) (x ', y', z ').