trasformazioni in ogl daniele marini corso di programmazione grafica aa2007/2008

11
Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Upload: roberto-valle

Post on 02-May-2015

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Trasformazioni in OGL

Daniele Marini

Corso Di Programmazione Grafica aa2007/2008

Page 2: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 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

Page 3: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 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

Page 4: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 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

Page 5: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 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

Page 6: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 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(angolo,vx,vy,vz);

glScale(sx,sy,sz);

Page 7: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 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);

Page 8: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 8

Gestione delle Matrici

• void glLoadIdentity( void ) – Imposta la matrice corrente all’identità

⎥⎥⎥⎥

⎢⎢⎢⎢

=

1000

0100

0010

0001

4I

Page 9: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 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• È possibile stack overflow!

Page 10: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 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

Page 11: Trasformazioni in OGL Daniele Marini Corso Di Programmazione Grafica aa2007/2008

Programmazione Grafica aa2007/2008 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