Note
Struttura
Costruzione di Interfacce
Lezione 5
 Trasformazioni Affini
cignoni@iei.pi.cnr.it
http://vcg.iei.pi.cnr.it/~cignoni
Cambi di Sistemi di riferimento
Il primo step della pipeline di rendering è quello di trasformare la scena nel sistema di riferimento della camera
Object Frame
Perché ogni oggetto ha il suo sistema di riferimento?
Uso Multiplo di uno stesso oggetto
Posizione parametrica
Coordinate Omogenee
Si dice che un punto P è rappresentato dalla matrice colonna p
E un vettore w è rappresentato dalla matrice colonna a
Trasformazioni Affini
Notare che se u è un vettore solo 9 elementi di A sono usati nella trasformazione
La quarta colonna corrisponde alla quarta riga della matrice di cambiamento di frame, che conteneva il nuovo punto di origine del frame (che chiaramente non serve se si parla di vettori)
Traslazione
modifica i punti di un frame sommando a tutti i punti un vettore di spostamento d
Traslazione
Traslazione
Rotazione
Di una rotazione si deve specificare
angolo,
asse
punto di
applicazione
Rotazione
Caso semplice asse z, intorno all’origine, di un angolo q
Possiamo considerare il problema in 2d
Rotazione
Rotazione
Rotazioni
Rotazione inversa
Le matrici di rotazione viste finora sono invertibili facilmente.
Quindi basta trasporre…
Rotazioni
Finora abbiamo visto solo rotazioni intorno all’origine e lungo gli assi.
Una rotazione arbitraria si ottiene componendo piu’ rotazioni e traslazioni
Scalatura
Non rigida
Non uniforme lungo gli assi
Solo centrata all’origine
Composizione di Trasformazioni
Le trasformazioni sono matrici
L’applicazione di trasformazione è la moltiplicazione di una matrice per un vettore.
L’applicazione di una sequenza di trasformazioni ad un punto corrisponde ad una sequenza di moltiplicazioni di di matrici per vettori
Associatività
Composizione di trasformazioni
Conviene se si deve
trasformare un solo punto
Conviene se si deve
trasformare molti punti
Composizione di Trasformazioni
La moltiplicazione tra matrici NON è commutativa
Quindi l’ordine delle trasformazioni È importante
Composizione di Trasformazioni
Rotazione intorno ad un punto
Si ottiene spostando tutto il sistema di riferimento nel punto, facendo la rotazione e rimettendo tutto a posto
Rotazione intorno ad un asse
L’idea e’ quella di fare :
due rotazioni che portino l’asse di rotazione specificato a coincidere con l’asse z,
la rotazione lungo quell’asse di quanto specificato
rimettere tutto a posto
trovare            non è semplice…
Shearing
Sarebbe derivabile dalle altre…
Lo spostamento e’ proporzionale alla coord y;
OpenGL
Nello Stato di OpenGL ci sono tre matrici 4x4 di trasformazioni
ModelView
Project
Texture
Una di queste e’ sempre la matrice corrente
Tutte i comandi che modificano matrici fanno sempre riferimento alla matrice corrente
Opengl
Per cambiare matrice Corrente
glMatrixMode()
GL_MODELVIEW
GL_PROJECTION
GL_TEXTURE
Per rimpiazzare la matrice
glLoadIdentity()
glLoadMatrix(Pointer to a matrix);
Tutti gli altri comandi modificano (moltiplicano per un altra matrice) la matrice corrente.
OpenGl
Leggere una matrice
glGetDoublev(GL_MODELVIEW_MATRIX,pointer_to_matrix)
Nota: nello scambio diretto di matrici OpenGL assume che siano memorizzate in column major order (e.g. per colonne)
OpenGL
Rotazioni
glRotatef(angle, ax,ay,az);
Traslazioni
glTranslatef(dx,dy,dz);
Scalature
glScalef(sx,sy,sz)
Generica
glMultMatrix(matrix_pointer)
Composizione di Matrici in Opengl
I comandi opengl postmoltiplicano la matrice corrente per quella specificata
Stack di matrici
La matrice corrente puo’ essere salvata in uno stack e recuperata successivamente
glPushMatrix()
glPopMatrix()
Stack di Matrici
Il Matrix Stack e’ particolarmente utile quando si disegnano scene strutturate