• Non ci sono risultati.

Cambi di Sistemi di riferimento

N/A
N/A
Protected

Academic year: 2021

Condividi "Cambi di Sistemi di riferimento"

Copied!
5
0
0

Testo completo

(1)

Costruzione di Interfacce Lezione 5

Trasformazioni Affini

cignoni@iei.pi.cnr.it http://vcg.iei.pi.cnr.it/~cignoni

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 2

Cambi di Sistemi di riferimento

™Il primo step della pipeline di rendering è quello di trasformare la scena nel sistema di riferimento della camera

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 3

Object Frame

™Perché ogni oggetto ha il suo sistema di riferimento?

™Uso Multiplo di uno stesso oggetto

™Posizione parametrica

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 4

Coordinate Omogenee

™Si dice che un punto P è rappresentato dalla matrice colonna p

™E un vettore w è rappresentato dalla matrice colonna a









= 1

3 2 1

α α α p









= 0

3 2 1

δ δ δ 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)

















=

0 1 0 0 0

3 2 1

34 33 32 31

24 23 22 21

14 13 12 11

γ γ γ

α α α α

α α α α

α α α α Au

Traslazione

™modifica i punti di un frame sommando a tutti i punti un vettore di spostamento d P′=P+d

d p p'= +

(2)

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 7

Traslazione









=









′=









=

0 1 1

z y x

z d y x z y x

α α α p

d p p p'= +









=

=

1 0 0 0

1 0 0

0 1 0

0 0 1

z y x

α α α T

Tp p

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 8

Traslazione









=

1 0 0 0

1 0 0

0 1 0

0 0 1 ) , , (

z y x

z y

x α

α α α

α α T









=

1 0 0 0

1 0 0

0 1 0

0 0 1 ) , , ( ) , ,

1(

z y x

z y x z y

x α

α α α

α α α α

α T

T

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 9

Rotazione

™Di una rotazione si deve specificare

™angolo,

™asse

™punto di applicazione

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 10

Rotazione

™Caso semplice asse z, intorno all’origine, di un angolo θ

™Possiamo considerare il problema in 2d

) sin(

) cos(

sin cos

θ φ ρ

θ φ ρ

φ ρ

φ ρ

+

=

+

=

=

=

y x y x

θ ρ

(x’,y’) (x,y)

Rotazione

θ θ θ φ ρ θ φ ρ

θ θ θ φ ρ θ φ ρ

φ ρ

φ ρ

cos sin cos sin sin cos

sin cos sin sin cos cos sin cos

y x y

y x x

y x

+

= +

′=

=

=

=

=

Rotazione

cosθ −sinθ 0 0









 +

=









=









1 cos sin

sin cos

1 ) ( 1

' ' '

z y x

y x z y x z

y x

z

θ θ

θ θ θ

R

(3)

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 13

Rotazioni









= −

1 0 0 0

0 cos 0 sin

0 0 1 0

0 sin 0 cos )

( θ θ

θ θ

Yθ R









= −

1 0 0 0

0 cos sin 0

0 sin cos 0

0 0 0 1 )

( θ θ

θ θ θ

RX

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 14

Rotazione inversa

™Le matrici di rotazione viste finora sono invertibili facilmente.

™Quindi basta trasporre…

) ( ) (

) cos(

) cos(

) sin(

) sin(

) ( ) (

1 1

θ θ

θ θ

θ θ

θ θ

RT

R R R

=

=

=

=

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 15

Rotazioni

™Finora abbiamo visto solo rotazioni intorno all’origine e lungo gli assi.

™Una rotazione arbitraria si ottiene componendo piu’ rotazioni e traslazioni

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 16

Scalatura

™Non rigida

™Non uniforme lungo gli assi

™Solo centrata all’origine









=

′=

′=

′=

1 0 0 0

0 0 0

0 0 0

0 0 0 ) , , (

z y x z y x

z y x

z z

y y

x x

β β β β β β

β β β

T

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à

CBAp q=

( )

( )

(CBAp )

q=

(CBA)p

q=

Composizione di trasformazioni

™Conviene se si deve trasformare un solo punto

™Conviene se si deve trasformare molti punti

( )

( )

(CBAp )

q=

(CBA)p q=

(4)

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 19

Composizione di Trasformazioni

™La moltiplicazione tra matrici NON è commutativa

™Quindi l’ordine delle trasformazioni È importante

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 20

Composizione di Trasformazioni

RTp q=

x y

TRp q=

x y

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 21

Rotazione intorno ad un punto

™Si ottiene spostando tutto il sistema di riferimento nel punto, facendo la rotazione e rimettendo tutto a posto

T(-p) T(p)R Rp= 0

x y

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 22

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…

) ( ) ( ) ( ) ( )

( x y y z z y y x x

x θ R θ R θ R θ R θ

R

R= − −

x

y θ

θ

Shearing

™Sarebbe derivabile dalle altre…

™Lo spostamento e’ proporzionale alla coord y;

′= +

=

′ cotθ y y

y x x

OpenGL

™Nello Stato di OpenGL ci sono tre matrici 4x4 di trasformazioni

™ModelView

™Project

™Texture

™Una di queste e’ sempre la matrice

(5)

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 25

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.

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 26

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)









15 11 7 3

14 10 6 2

13 9 5 1

12 8 4 0

a a a a

a a a a

a a a a

a a a a

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 27

OpenGL

™Rotazioni

™glRotatef(angle, ax,ay,az);

™Traslazioni

™glTranslatef(dx,dy,dz);

™Scalature

™glScalef(sx,sy,sz)

™Generica

™glMultMatrix(matrix_pointer)

9 Ott 2002 Costruzione di Interfacce - Paolo Cignoni 28

Composizione di Matrici in Opengl

™I comandi opengl postmoltiplicano la matrice corrente per quella specificata

x y

x y

RTp

q= q=TRp

glRotate glTranslate

glTranslate glRotate

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

// Whole car transformation // eg position of the car on the road glTranslate(CarPos)

glRotate(CarDirection,0,1,0) For(i=0;i<4;++i)

{

glPushMatrix();

// relative single wheel position glTranslate(wheelpos[i]);

DrawWheel(i);

glPopMatrix();

}

Riferimenti

Documenti correlati

L’equazione (26) indica che la legge di Newton ` e valida in qualunque sistema di riferimento, purch´ e oltre alle forze reali (forze di contatto + forza gravitazionale) si

 If we render several objects, one at a time, directly on the memory region used by the screen, we may experience flickering in the image.  To avoid flickering, rendering is done

Se  intendiamo  che  l'esperimento  di  caduta  di  un  sasso  fermo  si  svolge  con 

Infatti  tutti  i  punti  di  una  cabina  a  un  dato  istante  hanno  la  stessa  velocità  e  la  stessa 

F Dire quali dei seguenti sottoinsiemi sono sotto-spazi vettoriali e in caso positivo determinarne una

[r]

 Trovare in dir1 e dir2 tutti i file che hanno lo stesso nome, estensione txt e più di n righe.  Creare nel direttorio dir3 una versione dei file con

una parte spesso preponderante del costo computazionale di un metodo iterativo (si veda la formulazione che coinvolge il vettore residuo) `e costituita dal calcolo dei prodotti Ax k