Martici in openGL

Pinkyp
Ciao!!!
Sto studiando openGL (su LInux) però c'è una parte abbastanza fondamentale che non mi è molto chiara.
Da quel che ho capito sono 3 le matrici fondamentali:
-ModelView
-Projection
-Texture
E allora mi son chiesta: esiste uno schema da seguire per realizzare gli oggetti della scena? (per esempio prima si modifica la ModelView, poi si passa alla Projection ecc...).
Mi spiego: ho capito che ci sono delle funzioni per manipolare queste matrici ma non capisco qual è l'ordine da seguire nella manipolzaione e perchè. E' il senso delle cose che mi sfugge. So di non essere molto chiara però non saprei come spiegarmi meglio :oops:

Risposte
apatriarca
E' in molte situazione comodo vedere la matrice modelview come il prodotto \(V\,M\) di due matrici \(M\) (model) e \(V\) (view). Spiegherò le due matrici separatamente.
Supponi di avere la definizione di un cubo e di voler visualizzare due cubi affiancati che ruotano secondo due assi diversi. La prima cosa devi fare è determinare le trasformazioni che inseriscono questi cubi nella tua scena. Queste sono le matrici \(M\) (ce ne sono due - una per ogni cubo) e definiscono la trasformazione geometrica che trasforma le coordinate dei punti dal sistema di riferimento locale al cubo a quello globale in cui sono inseriti tutti gli oggetti. Siccome a questo punto i cubi sono inseriti in qualche punto della scena affiancati e ruotano su se stessi, le due matrici \(M\) avranno la stessa forma e saranno definiti da una rotazione intorno all'origine locale del cubo e da una traslazione dello stesso nella posizione globale di questo centro. Avremo quindi che \(M_i = T_i \, R_i\) dove le matrici \(R\) sono quelle di rotazione e \(T\) sono quelle di traslazione.

A questo punto hai i due cubi nella scena ma vorresti vederli sotto diverse angolazioni. In questo caso conviene immaginare di avere una specie di telecamera nella scena e di spostare tale telecamera in modo da vedere gli oggetti dal punto di vista desiderato. Questa è la matrice \(V\). Siccome muovere la telecamera in un modo corrisponde a muovere il mondo nel senso inverso, normalmente si operano trasformazioni che sono al contrario di quello che ti immagini sulla telecamera.

A questo punto veniamo alla matrice Projection. Questa è un pò più complicata da spiegare, ma descrive principalmente il modo in cui un insieme di coordinate in 3D vengono trasformate in coordinate 2D. Se hai fatto disegno tecnico ti ricorderai le assonometrie e i vari tipi di proiezioni ortogonali e prospettiche. Quella matrice definisce esattamente che tipo di proiezione stai usando nella tua scena.

La texture matrix ha infine poco a che fare con queste e definisce una trasformazione da applicare alle coordinate usate per ottenere il colore del frammento a partire dai pixel della texture. Le ragioni per usare questa matrice sono diverse, dalla scelta di aggiungere movimento (per esempio se stai disegnando un ruscello e vuoi far sembrare che l'acqua scorra) a quella di correggere errori dovuti alla proiezione a ...

In qualsiasi applicazione moderna che fa uso delle OpenGL le matrici sono gestite dall'applicazione e vengono poi passate nell'ordine più comodo. Di solito la matrice di proiezione non cambia spesso e si modifica solo quando cambia il viewport, mentre la modelview transformation viene passata ogni volta che un qualche oggetto viene disegnato per fornire la nuova posizione nella scena. Quella per le texture dipende dallo scopo che ci si prefigge usandola. In molte applicazioni non viene neanche modificata.

Pinkyp
Perfetto, grazie della risposta super completa :)

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.