Trasformazioni in OGL
description
Transcript of Trasformazioni in OGL
Trasformazioni in OGL
Daniele MariniDavide Gadia
Marco RonchettiDavide Selmo
Corso Di Programmazione Grafica aa2005/2006
Programmazione Grafica aa2005/2006 2
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 3
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 4
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 5
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
CTM
vertici vertici
Programmazione Grafica aa2005/2006 6
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 7
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 8
Gestione delle Matrici
• void glLoadIdentity( void ) – Imposta la matrice corrente all’identità
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
1000
0100
0010
0001
4I
Programmazione Grafica aa2005/2006 9
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 10
Gestione delle Matricivoid 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 11
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 ⎥
⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
151173
141062
13951
12840
aaaa
aaaa
aaaa
aaaa