Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni

  • View
    214

  • Download
    0

Embed Size (px)

Text of Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni

  • Slide 1
  • Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it http://vcg.isti.cnr.it/~cignoni
  • Slide 2
  • Costruzione di Interfacce - Paolo Cignoni2 Cambi di Sistemi di riferimento Il primo step della pipeline di rendering quello di trasformare la scena nel sistema di riferimento della camera
  • Slide 3
  • Costruzione di Interfacce - Paolo Cignoni3 Object Frame Perch ogni oggetto ha il suo sistema di riferimento? Uso Multiplo di uno stesso oggetto Posizione parametrica
  • Slide 4
  • Costruzione di Interfacce - Paolo Cignoni4 Coordinate Omogenee Si dice che un punto P rappresentato dalla matrice colonna p E un vettore w rappresentato dalla matrice colonna a
  • Slide 5
  • Costruzione di Interfacce - Paolo Cignoni5 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)
  • Slide 6
  • Costruzione di Interfacce - Paolo Cignoni6 Traslazione modifica i punti di un frame sommando a tutti i punti un vettore di spostamento d
  • Slide 7
  • Costruzione di Interfacce - Paolo Cignoni7 Traslazione
  • Slide 8
  • Costruzione di Interfacce - Paolo Cignoni8 Traslazione
  • Slide 9
  • Costruzione di Interfacce - Paolo Cignoni9 Rotazione Di una rotazione si deve specificare angolo, asse punto di applicazione
  • Slide 10
  • Costruzione di Interfacce - Paolo Cignoni10 Rotazione Caso semplice asse z, intorno allorigine, di un angolo Possiamo considerare il problema in 2d (x,y)
  • Slide 11
  • Costruzione di Interfacce - Paolo Cignoni11 Rotazione
  • Slide 12
  • Costruzione di Interfacce - Paolo Cignoni12 Rotazione
  • Slide 13
  • Costruzione di Interfacce - Paolo Cignoni13 Rotazioni
  • Slide 14
  • Costruzione di Interfacce - Paolo Cignoni14 Rotazione inversa Le matrici di rotazione viste finora sono invertibili facilmente. Quindi basta trasporre
  • Slide 15
  • Costruzione di Interfacce - Paolo Cignoni15 Rotazioni Finora abbiamo visto solo rotazioni intorno allorigine e lungo gli assi. Una rotazione arbitraria si ottiene componendo piu rotazioni e traslazioni
  • Slide 16
  • Costruzione di Interfacce - Paolo Cignoni16 Scalatura Non rigida Non uniforme lungo gli assi Solo centrata allorigine
  • Slide 17
  • Costruzione di Interfacce - Paolo Cignoni17 Composizione di Trasformazioni Le trasformazioni sono matrici Lapplicazione di trasformazione la moltiplicazione di una matrice per un vettore. Lapplicazione di una sequenza di trasformazioni ad un punto corrisponde ad una sequenza di moltiplicazioni di di matrici per vettori Associativit
  • Slide 18
  • Costruzione di Interfacce - Paolo Cignoni18 Composizione di trasformazioni Conviene se si deve trasformare un solo punto Conviene se si deve trasformare molti punti
  • Slide 19
  • Costruzione di Interfacce - Paolo Cignoni19 Composizione di Trasformazioni La moltiplicazione tra matrici NON commutativa Quindi lordine delle trasformazioni importante
  • Slide 20
  • Costruzione di Interfacce - Paolo Cignoni20 Composizione di Trasformazioni x y x y
  • Slide 21
  • Costruzione di Interfacce - Paolo Cignoni21 Rotazione intorno ad un punto Si ottiene spostando tutto il sistema di riferimento nel punto, facendo la rotazione e rimettendo tutto a posto x y
  • Slide 22
  • Costruzione di Interfacce - Paolo Cignoni22 Rotazione intorno ad un asse Lidea e quella di fare : due rotazioni che portino lasse di rotazione specificato a coincidere con lasse z, la rotazione lungo quellasse di quanto specificato rimettere tutto a posto trovare non semplice
  • Slide 23
  • Costruzione di Interfacce - Paolo Cignoni23 Shearing Sarebbe derivabile dalle altre Lo spostamento e proporzionale alla coord y;
  • Slide 24
  • Costruzione di Interfacce - Paolo Cignoni24 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
  • Slide 25
  • Costruzione di Interfacce - Paolo Cignoni25 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.
  • Slide 26
  • Costruzione di Interfacce - Paolo Cignoni26 OpenGl Leggere una matrice glGetDoublev(GL_MODELVIEW_MATRIX,poi nter_to_matrix) Nota: nello scambio diretto di matrici OpenGL assume che siano memorizzate in column major order (e.g. per colonne)
  • Slide 27
  • Costruzione di Interfacce - Paolo Cignoni27 OpenGL Rotazioni glRotatef(angle, ax,ay,az); Traslazioni glTranslatef(dx,dy,dz); Scalature glScalef(sx,sy,sz) Generica glMultMatrix(matrix_pointer) in gradi!
  • Slide 28
  • Costruzione di Interfacce - Paolo Cignoni28 Composizione di Matrici in Opengl I comandi opengl postmoltiplicano la matrice corrente per quella specificata x y x y I glRotate R glTranslate RT Stato della matrice corrente dopo il comando a sinistra I glTranslate T glRotate TR
  • Slide 29
  • Costruzione di Interfacce - Paolo Cignoni29 Stack di matrici La matrice corrente puo essere salvata in uno stack e recuperata successivamente glPushMatrix() glPopMatrix()
  • Slide 30
  • Costruzione di Interfacce - Paolo Cignoni30 Stack di Matrici Il Matrix Stack e particolarmente utile quando si disegnano scene strutturate // Whole car transformation // eg position of the car on the road glTranslate(CarPos) glRotate(CarDirection,0,1,0) For(i=0;i