quando si sta imparando la programmazione 3D, si è insegnato che è più facile pensare in termini di matrici di trasformazione 3:Perché sarebbe utile disporre di una matrice di proiezione separata, ma combinare il modello e la matrice di visualizzazione?
Il modello Matrix. Questa matrice è individuale per ogni singolo modello e ruota e ridimensiona l'oggetto come desiderato e infine lo sposta nella sua posizione finale all'interno del tuo mondo 3D. "La Model Matrix trasforma le coordinate del modello in coordinate globali".
The View Matrix. Questa matrice è solitamente la stessa per un grande numero di oggetti (se non per tutti) e ruota e sposta tutti gli oggetti in base alla "posizione della telecamera" corrente. Se immagini che la scena 3D è filmata da una telecamera e ciò che viene visualizzato sullo schermo sono le immagini catturate da questa fotocamera, la posizione della fotocamera e la sua direzione di visione definiscono quali parti della scena sono visibili e come gli oggetti appare sull'immagine catturata. Ci sono pochi motivi per cambiare la matrice di visualizzazione mentre si esegue il rendering di un singolo fotogramma, ma in realtà esistono (ad es. Eseguendo il rendering della scena due volte e cambiando la matrice di visualizzazione in mezzo, è possibile creare uno specchio molto semplice ma impressionante all'interno della scena) . Di solito la matrice della vista cambia una sola volta tra due frame disegnati. "The View Matrix trasforma le coordinate del mondo in coordinate dell'occhio".
The Projection Matrix. La matrice di proiezione decide come quelle coordinate 3D sono mappate a coordinate 2D, ad es. se c'è una prospettiva applicata a loro (gli oggetti diventano più piccoli più lontano sono lontani dallo spettatore) o no (proiezione ortogonale). La matrice di proiezione non cambia quasi mai. Potrebbe essere necessario cambiare se si esegue il rendering in una finestra e la dimensione della finestra è cambiata o se si esegue il rendering a schermo intero e la risoluzione è cambiata, tuttavia solo se la nuova dimensione della finestra/risoluzione dello schermo ha un diverso rapporto di visualizzazione rispetto a prima. Ci sono alcuni effetti pazzi per cui potresti voler cambiare questa matrice ma nella maggior parte dei casi è praticamente costante per tutta la durata del tuo programma. "La Projection Matrix trasforma le coordinate dell'occhio in coordinate dello schermo".
Questo ha molto senso per me. Ovviamente si possono sempre combinare tutte e tre le matrici in una singola, poiché moltiplicare un vettore prima dalla matrice A
e poi dalla matrice B
equivale a moltiplicare il vettore per matrice C
, dove C = B * A
.
Ora, se si guarda alla classica OpenGL (OpenGL 1.x/2.x), OpenGL conosce una matrice di proiezione. Tuttavia OpenGL non offre un modello o una matrice di visualizzazione, offre solo una matrice di visualizzazione del modello combinata. Perché? Questo design ti obbliga a salvare e ripristinare in modo permanente la "matrice di visualizzazione" poiché verrà "distrutta" dalle trasformazioni del modello ad essa applicate. Perché non ci sono tre matrici separate?
Se si guardano le nuove versioni OpenGL (OpenGL 3.x/4.x) e non si usa la pipeline di rendering classica ma si personalizza tutto con shader (GLSL), non ci sono più matrici disponibili più a lungo , devi definire le tue matrici. La maggior parte delle persone mantiene ancora il vecchio concetto di matrice di proiezione e matrice di visualizzazione del modello. Perché dovresti farlo? Perché non utilizzare le tre matrici, il che significa che non è necessario salvare e ripristinare in modo permanente la matrice della vista modello o utilizzare una singola matrice combinata modello-vista-proiezione (MVP), che consente di risparmiare una moltiplicazione di matrice nel proprio vertice shader per sempre singolo vertice reso (dopotutto una tale moltiplicazione non è gratis).
Quindi, per riassumere la mia domanda: quale vantaggio ha una matrice di visualizzazione del modello combinata con una matrice di proiezione separata con tre matrici separate o una singola matrice MVP?
Domanda molto dettagliata. – JCM