Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

40
Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008

Transcript of Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Page 1: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Le trasformazioni

Daniele Marini

Corso Di Programmazione Grafica aa 2007/2008

Page 2: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 2

Concetti

• Spazio affine• Coordinate omogenee• Matrici• Traslazione, Scala, Rotazione, Shear • Prodotto matrice-vettore colonna

Page 3: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 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

Page 4: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 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

++=⋅

+

−=

++=

=

=

w = u × v =

uyvz − uzvy

uzvx − uxvz

uxvy − uyvx

⎢ ⎢ ⎢

⎥ ⎥ ⎥ prodotto vettore (cross product)

Page 5: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 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

Page 6: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 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

Page 7: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 7

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

• 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.

p(t) =tp0 +(1−t)p1

Ap(t) =tAp0 +(1−t)Ap1

Page 8: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 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 una scena e istanziare più oggetti si applicano le trasformazioni affini, che cambiano il riferimento locale

Page 9: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 9

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

Page 10: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 10

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

Page 11: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 11

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

Page 12: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 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)

Page 13: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 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

Page 14: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 14

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

Page 15: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 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 di 3x3 elementi.

• I cambiamenti di base possibili in questo modo sono quindi solo: rotazioni o scala (o shear)!

Page 16: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 16

Classi di trasformazioni

Page 17: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 17

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 traslazionev’ = S v scalav’ = R v rotazione

Page 18: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 18

Coordinate omogenee

Spazio di 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

Page 19: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 19

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.

Page 20: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 20

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 come1 0 0

0 1 0'

0 0 1

0 0 0 1 1

x

y

z

T x

T yv Tv

T z

⎛ ⎞ ⎛ ⎞⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟= = ⋅⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠

Page 21: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 21

Traslazione

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

==

1000

100

010

001

),,()(z

y

x

zyx t

t

t

tttTtT

)1,,,()(' zzyyxx tptptp +++=⋅= ptTp

)()(1 tTtT −=−

Page 22: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 22

Rotazione

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛−

=

1000

0cossin0

0sincos0

0001

)(φφ

φφφxR

Ry (φ) =

cosφ 0 −sinφ 0

0 1 0 0

sinφ 0 cosφ 0

0 0 0 1

⎜ ⎜ ⎜ ⎜

⎟ ⎟ ⎟ ⎟

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

⎛ −

=

1000

0100

00cossin

00sincos

)(φφ

φφ

φzRTRR =−1

)()(1 φφ −=−ii RR

Page 23: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 23

Rotazione

rotazione attornoall’origine

rotazione attorno alcentro dell’oggetto:prima traslarepoi ruotarepoi contro-traslare

Page 24: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 24

Scala

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

==

1000

000

000

000

),,()(z

y

x

zyx s

s

s

sssSsS

)/1,/1,/1()(1zyx sssSsS =−

Page 25: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 25

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

Page 26: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 26

Trasformazione generica rigida (niente scala!)

• Una trasformazione rigida 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

Page 27: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 27

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

Page 28: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 28

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

Page 29: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 29

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

Page 30: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 30

Le trasformazioni per modellare

• Da oggetti prototipo a loro “istanze”• Tre trasformazioni nell’ordine:

– Scala– Rotazione– Traslazione

• Minst=T(R(S))

Page 31: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 31

Rotazioni:Metodo di Eulero

-z

y

x

Yaw - imbardata

Pitch - beccheggio

Roll - rollio

Page 32: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 32

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 è 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

Page 33: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 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 cosrsin h + sin rsin pcosh

sin rcosh + corssin psin h cosrcos p sinrsin h − corsin pcosh

−cos psinh sin p cos pcosh

⎜ ⎜ ⎜

⎟ ⎟ ⎟

Page 34: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 34

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 p

M=T-1RT

Page 35: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 35

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

Page 36: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 36

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

Page 37: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 37

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

Page 38: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 38

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

Page 39: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 39

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

Page 40: Le trasformazioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.

Programmazione Grafica aa2007/2008 40

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

π− +⎛ ⎞

⎜ ⎟= + −⎜ ⎟⎜ ⎟⎝ ⎠

+ +⎛ ⎞⎜ ⎟= + − +⎜ ⎟⎜ ⎟⎝ ⎠