Post on 02-May-2015
Le trasformazioni
Daniele Marini
Corso Di Programmazione Grafica aa 2005/2006
Programmazione Grafica aa2005/2006 2
Concetti
• Spazio affine• Coordinate omogenee• Matrici• Traslazione, Scala, Rotazione, Shear
• Prodotto matrice-vettore colonna
Programmazione Grafica aa2005/2006 3
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 aa2005/2006 4
Richiami di geometria affine
product)(dot interno prodotto
neapplicazio di punto del ne traslazio:vettore-punto somma v=P
punti due di differenza come vettore
),,(
),,(
222
zzyyxx
zyx
zyx
uvuvuvuv
Q
QPv
vvvv
vvvv
zyxP
++=⋅
+
−=
++=
=
=
product) (cross vettoreprodotto ⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
−−−
=×=
zyyx
zxxz
yzzy
vuvuvuvuvuvu
vuw
Programmazione Grafica aa2005/2006 5
Richiami di geometria affine
u×v=0 sse ortogonali
α(u+v)=αu+αv linearità
α1u1 +α2u2 +....+αnun =w combinazione lineare
se α1u1 +α2u2 +....+αnun =0 vale per α1 =α2..=αn =0
allora (u1,...,un) sono lineamente indipendenti
n è la dimensione dello spazio, (u1,...,un) è la base dello spazio
cosϑ =u .v
u.v angolo tra due vettori
sinϑ =u ×v
u.v il modulo del cross product dà il seno dell'angolo tra i due vettori
Programmazione Grafica aa2005/2006 6
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 aa2005/2006 7
Trasformazioni affini
• La trasformazione affine conserva le rette, sia A un generico operatore, scriviamo in funzione del parametro t un segmento tra i punti p0 , p1
• Possiamo descrivere un poliedro con i suoi vertici, facce e spigoli, questa proprietà ci garantisce che possiamo trasformare soltanto i vertici
p(t) =tp0 +(1−t)p1
Ap(t) =tAp0 +(1−t)Ap1
Programmazione Grafica aa2005/2006 8
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 e istanziare un oggetto si applicano le trasformazioni affini, che cambiano il riferimento locale
Programmazione Grafica aa2005/2006 9
Tipi di oggetti base
• Punti– E’ definita l’operazioni di differenza tra punti: produce un vettore
• Vettori, corispondono all’entità linea– Sono definite le operazioni sopra ricordate
• Sono definite le operazioni tra punti e vettori sopra ricordate
Programmazione Grafica aa2005/2006 10
Tipi di oggetti base - 2
• Piani: estensione della rappresentazione parametrica della retta, t,w sono parametri, P, Q ed R sono tre punti, identificano un piano; la retta tra P,Q è:
S(t)=tP+(1-t)Q • la retta tra S e R è:
V(w)=wV+(1-w)S• Combinando le due equazioni:
V(t,w)=w(tP+(1-t)Q)+(1-w)S
Programmazione Grafica aa2005/2006 11
Tipi di oggetti base - 3
• Si può riscrivere l’equazione del piano: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ò quindi 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ò essere scritta come:
n.(P-Q)=0
Programmazione Grafica aa2005/2006 12
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 aa2005/2006 13
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 aa2005/2006 14
Cambiamento di riferimento
• Un cambiamento del sistema di riferimento consiste nel cambiare la base di vettori ortonormali con cui un oggetto è definito
• 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 aa2005/2006 15
Cambiamenti di riferimento
• Questi cambiamenti di riferimento lasciano invariata l’origine: se vogliamo traslare l’origine, non possiamo rappresentare il cambiamento con una matrice 3x3 elementi.
• I cambiamenti di base possibili in questo modo sono quindi solo: rotazioni o scala!
Programmazione Grafica aa2005/2006 16
Trasformare gli oggetti
• Le trasformazioni agiscono sui vertici dell’oggetto 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 traslazionev’ = S v scalav’ = R v rotazione
Programmazione Grafica aa2005/2006 17
Coordinate omogenee
Spazio delle classi di equivalenza: ogni punto in coordinatecartesiane 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 aa2005/2006 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 punto P, Q.
Programmazione Grafica aa2005/2006 19
Coordinate omogenee
• Utilizzando le coordinate omogenee le trasformazioni necessarie alla modellazione possono essere espresse come matrici 4x4
• In particolare la traslazione viene espressa come
1 0 0
0 1 0'
0 0 1
0 0 0 1 1
x
y
z
T x
T yv Tv
T z
⎛ ⎞ ⎛ ⎞⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟= = ⋅⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠
Programmazione Grafica aa2005/2006 20
Traslazione
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
==
1000
100
010
001
),,()(z
y
x
zyx t
t
t
tttTtT
)1,,,()(' zzyyxx tptptp +++=⋅= ptTp
)()(1 tTtT −=−
Programmazione Grafica aa2005/2006 21
Rotazione
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛−
=
1000
0cossin0
0sincos0
0001
)(φφ
φφφxR
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
−=
1000
0cos0sin
0010
0sin0cos
)(φφ
φφ
φyR
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛ −
=
1000
0100
00cossin
00sincos
)(φφ
φφ
φzRTRR =−1
)()(1 φφ −=−ii RR
Programmazione Grafica aa2005/2006 22
Rotazione
rotazione attornoall’origine
rotazione attorno alcentro dell’oggetto:prima traslarepoi ruotarepoi contro-traslare
Programmazione Grafica aa2005/2006 23
Scala
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
==
1000
000
000
000
),,()(z
y
x
zyx s
s
s
sssSsS
)/1,/1,/1()(1zyx sssSsS =−
Programmazione Grafica aa2005/2006 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.
• Nota se M è una matrice ortogonale M-1=MT
Programmazione Grafica aa2005/2006 25
Trasformazione generica del corpo rigido (niente scala!)• Per i corpi rigidi la matrice di
trasformazione generica può essere espressa come la concatenazione di una traslazione e una rotazione
⎟⎟⎟⎟⎟
⎠
⎞
⎜⎜⎜⎜⎜
⎝
⎛
==
1000
)(222120
121110
020100
z
y
x
trrr
trrr
trrr
RtTX
)()())(( 1111 tTRtTRRtTX −=== −−−− T
Programmazione Grafica aa2005/2006 26
Trasformazione delle normali
• La matrice M associata ad un oggetto può essere utilizzata per trasformare punti, linee e poligoni così come vettori direzione
• Per la trasformazione delle normali invece deve essere utilizzata la matrice N=(M-1)T
• Se la matrice M è ortogonale N=(MT)T=M• Se M è composta da rotazioni, traslazioni e scale uniformi non ho problemi con le normali
Programmazione Grafica aa2005/2006 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 aa2005/2006 28
Composizione di trasformazioni
• Possiamo applicare a ogni punto separatamente le matrici:(se ho 1000 punti devo applicare le matrici singolarmente per ognuno)
• Oppure calcolare prima la matrice M:
A B Cp q
M qp
C(B(A))
Programmazione Grafica aa2005/2006 29
Le trasformazioni per modellare
• Da oggetti prototipo a loro “istanze”
• Tre trasformazioni nell’ordine:– Scala– Rotazione– Traslazione
• Minst=T(R(S))
Programmazione Grafica aa2005/2006 30
Rotazioni:Metodo di Eulero
-z
y
x
head
pitch
roll
Programmazione Grafica aa2005/2006 31
Metodo di Eulero
• Il metodo di Eulero costruisce le trasformazioni come moltiplicazione di matrici di rotazione intorno ai tre assi
• L’inversa della trasformazione può essere calcolata come
• Purtoppo la rotazione non è sempre commutativa: R1R2≠R2R1
( , , ) ( ) ( ) ( )z x yh p r r p h=E R R R
1 ( )T T T T Tz x y y x z
− = = =E E R R R R R R
Programmazione Grafica aa2005/2006 32
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 giroscopi vengono a coincidere.
• Esempio:– rotazione di 90° intorno all’asse x – volendo ruotare ora intorno a z, a causa della rotazione precedente, otterremo una rotazione intorno a y
Programmazione Grafica aa2005/2006 33
Rotazione di Eulero
• Sviluppiamo la concatenazione delle tre trasformazioni (scriviamo le matrici 3x3 per semplicità)
( , , ) ( ) ( ) ( )z x yh p r r p h=E R R R
€
cosrcosh − sin rsin psinh −sin rcos p cosrsinh + sin rsin pcosh
sin rcosh + corssin psinh cosrcos p sinrsinh − corsin pcosh
−cos psinh sin p cos pcosh
⎛
⎝
⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟
Programmazione Grafica aa2005/2006 34
Gimbal Lock
• Se eseguiamo una rotazione di 90° attorno a y otteniamo:
• Abbiamo perso un grado di libertà!
cos cos sin sin 0 cos sin sin cos
( , / 2, ) sin cos cos sin 0 sin sin cos cos
0 1 0
cos( ) 0 sin( )
sin( ) 0 cos( )
0 1 0
r h r h r h r h
E h r r h r h r h r h
r h r h
r h r h
π− +⎛ ⎞
⎜ ⎟= + −⎜ ⎟⎜ ⎟⎝ ⎠
+ +⎛ ⎞⎜ ⎟= + − +⎜ ⎟⎜ ⎟⎝ ⎠
Programmazione Grafica aa2005/2006 35
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
• Traslare inversamente nel punto pM=T-1RT
Programmazione Grafica aa2005/2006 36
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.
x
z
y
r
t
s
x
z
y
r
t
s
x
z
y
r
t
s
Programmazione Grafica aa2005/2006 37
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 aa2005/2006 38
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 aa2005/2006 39
Rotazione intorno ad un asse generico
srt
sss
s
×=
=
⎪⎩
⎪⎨
⎧
<<−
<<−
<<−
=
/
e se)0,,(
e se),0,(
e se),,0(
yzxzxy
zyxyxz
zxyxyz
rrrrrr
rrrrrr
rrrrrr
MRMX
t
s
r
M
)(φxT
T
T
T
=
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛
=
• 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