110 likes | 270 Views
Corso Di Programmazione Grafica aa2005/2006. Trasformazioni in OGL. Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo. Trasformazioni. Le trasformazioni sono rappresentate da matrici 4x4 (coordinate omogenee)
E N D
Corso Di Programmazione Grafica aa2005/2006 Trasformazioni in OGL Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo
Trasformazioni • Le trasformazioni sono rappresentate da matrici 4x4 (coordinate omogenee) • Applicazione delle trasformazioni come moltiplicazione di una matrice per un vettore • Viene mantenuto uno stack delle matrici utilizzate per le trasformazioni Programmazione Grafica aa2005/2006
Trasformazioni in OGL • Ci sono due matrici in OGL: • Matrice di modellazione GL_MODELVIEW • Matrice di vista GL_PROJECTION • Per selezionare su quale matrice si vuole operare si chiama la funzione glMatrixMode(GL_MODELVIEW| GL_PROJECTION) • La matrice di modellazione rappresenta trasformazioni affini con 12 gradi di libertà; definita in spazio omogeneo 4x4 Programmazione Grafica aa2005/2006
CTM • In OGL c’è la nozione di current transformation matrix CTM • Essa viene applicata ad ogni vertice definito successivamente alla sua istanziazione • Se si cambia la CTM si cambia lo stato del sistema Programmazione Grafica aa2005/2006
CTM • La CTM è inizializzata alla identità • Per modificarla si può • assegnare nuovi valori ai singoli argomenti • Moltiplicarla per una nuova matrice • La CTM è il prodotto della matrice di modellazione per quella di proiezione MODELVIEW PROJECTION vertici vertici CTM Programmazione Grafica aa2005/2006
Trasformazioni • La composizione di trasformazioni equivale alla moltiplicazione delle rispettive matrici • La moltiplicazione di matrici non è commutativa.Quindi l’ordine con cui vengono applicate le trasformazioni è importante • Ordine corretto M=T(R(S)) corrispondente alle chiamate (post-moltiplicazione): glTranslate(dx,dy,dz); glRotate(ango,vx,vy,vz); glScale(sx,sy,sz); Programmazione Grafica aa2005/2006
Trasformazioni • void glLoadIdentity(); • void glTranslate{fd}(TYPE x, TYPE y, TYPE z); • void glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z); • void glScale{fd}(TYPE x, TYPE y, TYPE z); Programmazione Grafica aa2005/2006
Gestione delle Matrici • void glLoadIdentity( void ) • Imposta la matrice corrente all’identità Programmazione Grafica aa2005/2006
Gestione delle Matrici • void glPushMatrix( void ) • void glPopMatrix ( void ) • Gestiscono lo stack delle matrici • glPushMatrix inserisce la matrice corrente nello stack duplicandola • Lo stack delle matrici può essere utilizzato in maniera gerarchica • La funzione dello stack è di registrare lo stato del sistema per poterlo recuperare Programmazione Grafica aa2005/2006
Gestione delle Matrici void glLoadMatrixd(GLdouble *m) void glLoadMatrixf(GLfloat *m) • Rimpiazza la matrice corrente con la matrice definita tramite l’array m void glMultMatrixd(const GLdouble *m)void glMultMatrixf(const GLfloat *m) • Moltiplica la matrice corrente con la matrice definita tramite l’array Programmazione Grafica aa2005/2006
Gestione delle Matrici • I parametri delle funzioni glLoadMatrix e glMultMatrixd sono definiti come array di 16 elementi • La matrice viene definitanell’array utilizzando una notazionecolumn-major order Programmazione Grafica aa2005/2006