Lo scopo di Model View Projection Matrix


102

Per quali scopi utilizziamo Model View Projection Matrix? Perché gli shader richiedono Model View Projection Matrix?


12

3
Ho suggerito di aprire un sito Stack Exchange dedicato alla Computer Graphics e ho selezionato questa domanda come domanda di esempio . Segui computergraphics.stackexchange.com se sei interessato a vedere il sito che viene lanciato!
cancella il

Risposte:


196

Le matrici modello, vista e proiezione sono tre matrici separate. Modella le mappe dallo spazio delle coordinate locali di un oggetto nello spazio del mondo, vista dallo spazio del mondo allo spazio della telecamera, proiezione dalla telecamera allo schermo.

Se componi tutti e tre, puoi utilizzare l'unico risultato per mappare dallo spazio degli oggetti allo spazio dello schermo, permettendoti di capire cosa ti serve per passare alla fase successiva di una pipeline programmabile dalle posizioni dei vertici in entrata.

Nelle vecchie pipeline di funzionalità fisse, applicavi il modello e la vista insieme, quindi elaborava l'illuminazione usando un altro risultato derivato da essi (con alcune correzioni in modo che, ad esempio, le normali siano ancora una lunghezza unitaria anche se hai applicato un po 'di ridimensionamento all'oggetto ), quindi applicare la proiezione. Puoi vederlo riflesso in OpenGL, che non separa mai il modello e le matrici della vista, mantenendole come un unico stack di matrici della vista del modello. Pertanto, a volte lo vedi anche riflesso negli shader.

Quindi: la matrice di proiezione della vista del modello composto viene spesso utilizzata dagli shader per mappare i vertici caricati per ogni modello sullo schermo. Non è necessario, ci sono molti modi per ottenere la stessa cosa, è normale perché consente tutte le trasformazioni lineari possibili. Per questo motivo, una versione meno composta di esso era anche la norma nel vecchio mondo delle condutture fisse.


3
quindi per diversi oggetti (mesh) abbiamo bisogno di diverse matrici modelView, no?
Yuriy Vikulov

5
Supponendo che possano muoversi indipendentemente o essere stati posizionati separatamente, allora sì. Quindi questo è di gran lunga il modo più comune di procedere: passare modelView o projectionModelView come uniforme al programma shader, dopo averlo impostato per il modello corrente sulla CPU.
Tommy

Ciao Tommy, puoi suggerire un codice di esempio per la funzionalità di panoramica in Opengl Es2.0 in Android utilizzando questa matrice di proiezione della vista modello, se possibile. Ho referenziato più link, non sono riuscito a farmi un'idea chiara. Se qualsiasi codice di esempio significa, è facile da capire per me ..
harikrishnan

1
Ho una domanda. Se openGL usasse la matrice MV come una sola e se andassimo dallo spazio della fotocamera allo spazio del mondo avremmo bisogno di invertire (matrice di proiezione * matrice di vista) * (posizione del cursore) ma se la vista del modello è una matrice composta. come separiamo il modello e la matrice di visualizzazione in modo da poter utilizzare la matrice di visualizzazione per quel calcolo. Quindi devo tenerli separati?
Evren Bingøl

@ EvrenBingøl Hai già ricevuto la tua risposta? Ho mantenuto il mio modello e le matrici delle viste separate, ma mi piacerebbe conoscere la risposta effettiva alla tua domanda se dovessi continuare a renderla separata o meno.
tom_mai78101

9

Perché le matrici sono convenienti. Le matrici aiutano a convertire posizioni / direzioni rispetto a spazi diversi (uno spazio può essere definito da 3 assi perpendicolari e un'origine).

Ecco un esempio da un libro specificato da @ legends2k nei commenti.

Gli abitanti di Cartesia utilizzano una mappa della loro città con l'origine centrata in modo abbastanza sensato al centro della città e gli assi diretti lungo i punti cardinali del compasso. I residenti di Dislessia usano una mappa della loro città con le coordinate centrate in un punto arbitrario e gli assi che corrono in alcune direzioni arbitrarie che probabilmente sembravano una buona idea in quel momento. I cittadini di entrambe le città sono abbastanza contenti delle rispettive mappe, ma l'Ingegnere dei Trasporti dello Stato incaricato di stanziare un budget per la prima autostrada tra Cartesia e Dislessia ha bisogno di una mappa che mostri i dettagli di entrambe le città, che quindi introduce una terza coordinata sistema che è superiore a lui, anche se non necessariamente a chiunque altro.

Ecco un altro esempio,

Supponi di aver creato un oggetto macchina in un gioco con le sue posizioni dei vertici utilizzando le coordinate del mondo. Supponi di dover usare la stessa macchina in qualche altro gioco in un mondo completamente diverso, devi definire nuovamente le posizioni ei calcoli diventeranno complessi. Questo perché devi di nuovo calcolare le posizioni di finestrino, cofano, faro, ruote ecc. Nell'auto rispetto al nuovo mondo.

Guarda questo video per comprendere i concetti di modello, vista e proiezione. (altamente raccomandato)

Quindi guarda questo per capire come i vertici nel mondo sono rappresentati come Matrici e come vengono trasformati.


Se ci pensi a fondo, ti renderai conto che anche se la trasformazione è basata sull'origine di un oggetto (cioè un punto singolo), tutti i vertici dell'oggetto (maglia / modello formalmente) subiranno la trasformazione cioè tutti i 1000 vertici saranno moltiplicati dalla matrice del modello. Quindi il tuo punto non è ben formulato. La matrice del modello è semplicemente la matrice che trasforma i vertici nello spazio modello nello spazio mondiale. Non ci sono vantaggi in termini di prestazioni qui, è solo praticità.
legends2k

Se è così, perché non rappresentano semplicemente ogni punto in un singolo spazio 3D? Dovrebbero esserci dei vantaggi quando si utilizza l'output di una scena in un'altra scena che potrebbe essere un input per un'altra scena mobile :)
cegprakash

1
Non rappresentano tutti i vertici in un unico spazio poiché è conveniente lavorare nello spazio relativo piuttosto che in uno spazio più grande, come il mondo. Supponiamo che un robot, quando gli viene ordinato di spostarsi di 2 metri in avanti, lo faccia con il suo occhio è più appropriato che localizzare il centro del mondo, quindi calcolare le coordinate risultanti corrette.
legends2k

Penso che tu abbia ragione .. In ogni caso verrà chiamato il fragment shader per ogni pixel e faremo moltiplicazioni di matrici per ogni pixel in caso di mesh complesse. : |
cegprakash

2
In fragment shader vengono eseguiti solo i calcoli di illuminazione / colorazione, nel momento in cui i dati raggiungono lo shader di frammento, tutti i calcoli di posizione sono completi (cioè nello shader di vertice); una migliore spiegazione sul perché utilizzare più sistemi di coordinate è qui . Questo libro è un'eccellente risorsa matematica per giochi 3D. Lo stesso capitolo di un PDF di esempio dal sito Web del libro .
legends2k
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.