Corso Di Programmazione Grafica aa 2007/2008
Le trasformazioni
Daniele Marini
Concetti
• Spazio affine
• Coordinate omogenee
• Matrici
• Traslazione, Scala, Rotazione, Shear
• Prodotto matrice-vettore colonna
Programmazione Grafica aa2007/2008
2
Richiami di geometria affine
• Spazio vettoriale lineare: operazioni di
somma tra vettori
• Campo scalare e operazioni prodotto
vettore per scalare
• Spazio affine, due nuove operazioni:
– addizione vettore - punto;
– sottrazione punto-punto
Programmazione Grafica aa2007/2008
3
Richiami di geometria affine
P  ( x, y , z )
v  (v x , v y , v z )
v  vx  v y  vz
2
2
2
v  P  Q vettore come differenza di due punti
P = v  Q somma punto - vettore : traslazio ne del punto di applicazio ne
v  u  v x u x  v y u y  v z u z prodotto interno (dot product)
uyv z  uzv y 


w  u  v  uzv x  uxv z  prodotto vettore (cross product)

uxv y  uyv x 

Programmazione Grafica aa2007/2008
4
Richiami di geometria affine
u  v  0 sse ortogonali
 (u  v)   u   v linearità
1 u1   2 u2  ....   n un  w combinazione lineare
se  1 u1   2 u2  ....   n un  0 vale per  1   2 ..   n  0
allora ( u1 ,...,un ) sono lineamente indipendenti
n è la dimensione dello spazio,
cos  
sin  
(u1 ,...,un ) è la base dello spazio
u .v
angolo tra due vettori
u.v
u v
u. v
il modulo del cross product dà il seno dell'
Programmazione Grafica aa2007/2008
angolo tra i due vettori
5
Trasformazioni affini
• Rappresentate tramite matrici
• Più trasformazioni possono essere
combinate moltiplicando le rispettive
matrici tra loro, creando una sola
trasformazione
• Una trasformazione si ottiene in generale
combinando trasformazioni lineari (rotazioni,
scala e shear) seguite da una traslazione
Programmazione Grafica aa2007/2008
6
Trasformazioni affini
• La trasformazione affine conserva le rette, sia A una
generica trasformazione, scriviamo in funzione del
parametro t un segmento tra i punti p0 , p1
p(t)  tp  (1 t) p
0
1
Ap(t)  tAp  (1  t)Ap
0
1
• Siccome descriviamo poliedri mediante i vertici, le
facce e gli spigoli, questa proprietà ci garantisce
che possiamo trasformare soltanto i vertici: la
relazione lineare tra punti e la topologia della
struttura non cambiano.
Programmazione Grafica aa2007/2008
7
Definizione degli oggetti
• Gli oggetti possono essere definiti in un
proprio sistema di riferimento locale:
• i vertici dell’oggetto sono definiti rispetto a un
orientamento proprio e naturale
• un oggetto complesso può essere decomposto
in elementi più semplici col proprio riferimento
locale e in seguito assemblato aggregando
oggetti elementari
• un oggetto può essere istanziato più volte
• Per assemblare una scena e istanziare
più oggetti si applicano le trasformazioni
affini, che cambiano il riferimento locale
Programmazione Grafica aa2007/2008
8
Tipi di oggetti base
• Punti
– E’ definita l’operazioni di differenza tra
punti: produce un vettore
• Vettori, corrispondono all’entità linea
– Sono definite le operazioni sopra
ricordate
• Sono definite le operazioni tra punti e
vettori sopra ricordate
Programmazione Grafica aa2007/2008
9
Tipi di oggetti base - 2
• Piani: estensione della rappresentazione
parametrica della retta; t,w sono parametri,
P, Q ed R sono tre punti, con i quali
possiamo identificare un piano; la retta tra
P,Q si può scrivere:
S(t)=tP+(1-t)Q
• la retta tra S e R si può ora scrivere:
V(w)=wS+(1-w)R
• Combinando le due equazioni:
V(t,w)=w(tP+(1-t)Q)+(1-w)R
Programmazione Grafica aa2007/2008
10
Tipi di oggetti base - 3
• Questa può essere considerata come equazione del piano
per i tre punti P,Q,R:
V(t,w)=P+w(1-t)(Q-P)+(1-w)(R-P)
• Q-P ed R-P sono due vettori u v, da cui
V(t,w)=P+tu+wv
• Il piano può anche essere definito da un punto e due vettori
non paralleli.
• Se 0≤t≤1 e 0≤w≤1 tutti i punti di V(t,w) sono interni al triangolo
PQR
• Il vettore ortogonale a u e v è n=uxv quindi l’equazione del
piano può anche essere scritta come:
n.(P-Q)=0
Programmazione Grafica aa2007/2008
11
Sistemi di coordinate e sistemi
di riferimento (frame)
• Quanto detto fin’ora è indipendente da uno
specifico sistema di coordinate
• La definizione di una base di vettori linearmente
indipendenti e unitari permette di identificare un
sistema di coordinate
• Se definiamo i tre versori con una medesima origine
identifichiamo un sistema di riferimento (frame)
Programmazione Grafica aa2007/2008
12
Un frame standard
• Lo spazio può essere orientato in due modi:
– mano sinistra: avvolgete la mano all’asse x e puntate il pollice
verso x a sinistra, z (medio) viene verso di voi e y (indice) va verso
l’alto
– mano destra: avvolgete la mano all’asse x e puntate il pollice
verso x a destra, z (medio) viene verso di voi e y (indice) va verso
l’alto
• In OGL sono definiti molti frames:
–
–
–
–
–
–
Object o model frame
World frame
Eye (camera) frame
Clip coordinates
Normalized device coordinates
Window (screen) coordinates
• Il passaggio da un frame all’altro avviene tramite
trasformazioni
Programmazione Grafica aa2007/2008
13
Cambiamento di riferimento
• Un cambiamento del sistema di riferimento consiste nel
cambiare la base di vettori ortonormali
• La nuova base può essere espressa come combinazione
lineare della vecchia base:
– Vecchia base: v1v2v3
– Nuova base: u1u2u3
u1=a11v1+a12v2+a13v3
u2=a21v1+a22v2+a23v3
u3=a31v1+a32v2+a33v3
• aij sono i coefficienti delle combinazioni lineari per esprimere la
nuova base in funzione della vecchia
• Le equazioni non sono altro che il risultato del prodotto della
matrice dei coefficienti per la vecchia base
Programmazione Grafica aa2007/2008
14
Cambiamenti di riferimento
• Questi cambiamenti di riferimento
lasciano invariata l’origine: se
vogliamo traslare l’origine, non
possiamo rappresentare il
cambiamento con una matrice di 3x3
elementi.
• I cambiamenti di base possibili in
questo modo sono quindi solo:
rotazioni o scala (o shear)!
Programmazione Grafica aa2007/2008
15
Classi di trasformazioni
Programmazione Grafica aa2007/2008
16
Trasformare gli oggetti
• Le trasformazioni agiscono trasformando i vertici
dell’oggetto nel sistema di riferimento originale, o
come cambiamento di sistema di riferimento
• Denotiamo i vertici (punti) come
vettori colonna v
• R, T e S rappresentano gli operatori di rotazione,
traslazione e scala
• Il punto trasformato è quindi:
v’ = v + T
v’ = S v
v’ = R v
traslazione
scala
rotazione
Programmazione Grafica aa2007/2008
17
Coordinate omogenee
Spazio di classi di equivalenza: ogni punto in coordinate
cartesiane 3D corrisponde a infiniti punti nello spazio
omogeneo 4D che differiscono solo per un fattore
moltiplicativo w:
V (x, y,z) corrisponde a :
V (X  wx,Y  wy,Z = wz,w)
Il passaggio dallo spazio omogeneo allo spazio 3D:
x  X /w

y  Y /w
z  Z /w
solitamente si sceglie w=1
Programmazione Grafica aa2007/2008
18
Coordinate omogenee
• In alto: il generico punto
(x,y,z) in coordinate
omogenee corrisponde a
un unico punto sul piano z=1
• In basso: l’operazione di
somma in coordinate
omogenee dei vettori u,v
genera il vettore con
estremo in R, che
corrisponde anche alla
somma in coordinate
omogenee dei punti P, Q.
Programmazione Grafica aa2007/2008
19
Coordinate omogenee
• Utilizzando le coordinate omogenee le trasformazioni
necessarie alla modellazione possono essere espresse come
matrici 4x4, e l’applicazione di una trasformazione a un punto
si riduce a un prodotto vettore-matrice
• In particolare la traslazione viene espressa come
 1 0 0 Tx   x 

  
0
1
0
T
y   y

v '  Tv 

 0 0 1 Tz   z 

  
0 0 0 1  1
Programmazione Grafica aa2007/2008
20
Traslazione
1

0
T(t )  T(t x , t y , t z )  
0

0

0 0 tx 

1 0 ty 
0 1 tz 

0 0 1 
p'  T(t )  p  ( p x  t x , p y  t y , p z  t z ,1)
T1 (t )  T(t )
Programmazione Grafica aa2007/2008
21
Rotazione
0
1

 0 cos 
R x ( )  
0 sin 

0
0

 cos 

 sin 
R z ( )  
0

 0

0
 sin 
cos 
0
0

0
0

1 
cos 

0

R y ( ) 
sin 

 0
 sin  0 0 


cos  0 0 
0
1 0

0
0 1 
Programmazione Grafica aa2007/2008
0 sin 
1
0
0 cos 
0
0
0

0
0

1
R 1  RT
1
R i ( )  R i ( )
22
Rotazione
rotazione attorno
all’origine
rotazione attorno al
centro dell’oggetto:
prima traslare
poi ruotare
poi contro-traslare
Programmazione Grafica aa2007/2008
23
Scala
 sx

0
S(s)  S( s x , s y , s z )  
0

0

0
sy
0
0
0
sz
0
0
0

0
0

1 
S 1 (s)  S(1 / sx ,1 / s y ,1 / sz )
Programmazione Grafica aa2007/2008
24
Trasformazioni inverse
• Denotiamo le inverse come: T-1, S-1, R-1
• La traslazione inversa si ottiene negando i
coefficienti di traslazione
• La scala inversa si ottiene prendendo il reciproco
dei coefficienti
• La rotazione inversa si ottiene negando l’angolo di
rotazione.
• Le trasformazioni sono invertibili salvo la scala 0!
• Nota se M è una matrice ortogonale M-1=MT
Programmazione Grafica aa2007/2008
25
Trasformazione generica
rigida (niente scala!)
• Una trasformazione rigida generica può
essere espressa come la concatenazione di
una traslazione e una rotazione
 r00

 r10
X  T( t ) R  
r
 20
0

r01 r02 t x 

r11 r12 t y 
r21 r22 t z 

0 0 1 
X1  (T(t )R) 1  R 1T(t) 1  RT T(t)
Programmazione Grafica aa2007/2008
26
Trasformazione delle normali
• La matrice M associata ad un oggetto può essere utilizzata
per trasformare punti, linee e poligoni o generici vettori
associati a punti di un piano.
• Però per la trasformazione delle normali deve essere utilizzata
la matrice N=(M-1)T
• Per capire la ragione notiamo che se n è la normale a un
piano e v è un vettore sul piano allora nTv=0, ma questa
equazione si può scrivere considerando la matrice di
trasformazione M: nTM-1Mv=0;
• Ovvero: nTM-1 è la trasposta del vettore normale trasformato
• Quindi la normale trasformata è la sua anti-trasposta: (M-1)Tn
Programmazione Grafica aa2007/2008
27
Composizione di
trasformazioni
• Si possono applicare trasformazioni in
successione, moltiplicando in ordine
opportuno le matrici (associatività)
v”=M2M1v = M2(M1v) =M2v’
– la trasf. M1 viene applicata per prima!
• ricordiamo che il prodotto di rotazioni non è
commutativo: R2R1 ≠ R1R2
Programmazione Grafica aa2007/2008
28
Composizione di
trasformazioni
• Possiamo applicare a ogni punto
separatamente le matrici:
(se ho 1000 punti devo applicare le matrici singolarmente per
ognuno)
p
A
B
C
q
• Oppure calcolare prima la matrice M:
C(B(A))
p
M
q
Programmazione Grafica aa2007/2008
29
Le trasformazioni per
modellare
• Da oggetti prototipo a loro “istanze”
• Tre trasformazioni nell’ordine:
– Scala
– Rotazione
– Traslazione
• Minst=T(R(S))
Programmazione Grafica aa2007/2008
30
Rotazioni:
Metodo di Eulero
y
Yaw - imbardata
x
-z
Pitch - beccheggio
Roll - rollio
Programmazione Grafica aa2007/2008
31
Metodo di Eulero
• Il metodo di Eulero costruisce le
trasformazioni come moltiplicazione di
matrici di rotazione intorno ai tre assi
E(h, p, r )  R z (r )R x ( p) R y (h)
• L’inversa della trasformazione può essere
calcolata come
E1  ET  (R z R x R y )T  R yT R xT R zT
• Purtoppo la rotazione non è
commutativa: R1R2≠R2R1
Programmazione Grafica aa2007/2008
32
Rotazione di Eulero
• Sviluppiamo la concatenazione delle
tre trasformazioni (scriviamo le matrici
3x3 per semplicità)
E(h, p, r )  R z (r )R x ( p) R y (h)
cos r cos h  sin r sin psin h sin r cos p cos r sin h  sin r sin pcos h 


sin
r
cos
h

corssin
psin
h
cos
r
cos
p
sin
r
sin
h

cor
sin
pcos
h




cos psin h
sin p
cos pcos h



Programmazione Grafica aa2007/2008
33
Rotazione attorno a un punto
e parallela a un asse
• Traslare l’oggetto nell’origine, i coefficienti
della traslazione T sono riferiti al punto p
• Ruotare attorno all’origine di un angolo q
• Traslare inversamente nel punto p
M=T-1RT
Programmazione Grafica aa2007/2008
34
Rotazione intorno ad un asse
generico
• Un altro modo per risolvere il problema è di
considerare la rototraslazione nell’origine come un
cambiamento di sistema di riferimento, cioè di base
ortonormale, eseguendo quindi la rotazione attrono
al nuovo asse, ad esempio x.
y
y
r
y
r
s
s
s
r
x
x
x
t
z
z
t
Programmazione Grafica aa2007/2008
z
t
35
Cambiamento di base
• Sia r l’asse di rotazione desiderato, troviamo
due nuovi versori ortogonali ad r che
definiscono un nuovo riferimento.
• Per trovare il primo vettore ortogonale a r
moltiplico r per uno dei versori del frame
originale ex|y|z : ci sono due casi possibili: il
nuovo vettore è parallelo a r oppure è
ortogonale sia ad r sia ad ex|y|z ad es:
• r x ex = r x (1,0,0)T=(0,rz,-ry)=v
Programmazione Grafica aa2007/2008
36
Cambiamento di riferimento
• Moltiplicando scalarmente il nuovo
vettore trovato v.v, se è nullo r e ex
sono paralleli, si cerca un altro vettore
ortogonale a r ey|z
• Il vettore trovato sia s
• Il terzo vettore ortogonale a r ed s si
determina con il prodotto vettore tra i
due
Programmazione Grafica aa2007/2008
37
Rotazione intorno ad un asse
generico
(0,rz , ry ) se rx  ry e rx  rz

s  (rz ,0, rx ) se ry  rx e ry  rz
(r , r ,0) se r  r e r  r
z
x
z
y
 y x
ss/ s
t  rs
 rT 
 T
M  s 
 tT 
 
• Il test per valutare il
parallelismo tra r ed
ex|y|z può essere
semplificato come qui
indicato
• Si noti che essendo M
ortogonale, la sua
inversa è MT
X  M T R x ( )M
Programmazione Grafica aa2007/2008
38
Gimbal Lock
(blocco del giroscopio)
• Gimbal lock avviene quando le
rotazioni sono concatenate in
modo tale che un grado di libertà
viene perso, ad es quando due assi
di rotazione del giroscopio
vengono a coincidere.
• Esempio:
– rotazione di 90° intorno all’asse z
– volendo ruotare ora intorno a x, a
causa della rotazione precedente,
otterremo una rotazione intorno a y
Programmazione Grafica aa2007/2008
39
Gimbal Lock
• Se eseguiamo una rotazione di 90°
attorno a y otteniamo:
 cos r cos h  sin r sin h

E (h,  / 2, r )   sin r cos h  cos r sin h

0

 cos(r  h)


 sin(r  h)

0

0 cos r sin h  sin r cos h 

0 sin r sin h  cos r cos h 

1
0

0 sin(r  h) 

0  cos(r  h) 

1
0

• Abbiamo perso un grado di libertà!
Programmazione Grafica aa2007/2008
40
Scarica

Le trasformazioni - Università degli Studi di Milano