Corso di Programmazione Grafica e Laboratorio Daniele Marini Trasformazioni Corso di Programmazione Grafica e Laboratorio Daniele Marini
Concetti Spazio affine Coordinate omogenee Matrici Traslazione, Scala, Rotazione, Shear Prodotto matrice-vettore colonna
Richiami di geometria affine Spazio vettoriale lineare: operazioni di somma tra vettori Campo scalare e operazioni prodotto vettore per scalare Spazio affine: addizione vettore - punto; l’operazione di sottrazione punto-punto produce un vettore
Richiami di geometria affine
Richiami di geometria affine
Lo spazio affine 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 Questo definisce il world coordinate system in cui sono definiti gli oggetti
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
Trasformazioni affini La trasformazione affine conserva le rette Possiamo descrivere un poliedro con i suoi vertici, facce e spigoli, questa proprietà ci garantisce che possiamo trasformare soltanto i vertici
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
Trasformare gli oggetti Le trasformazioni agiscono sui vertici dell’oggetto 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 traslazione v’ = S v scala v’ = R v rotazione
Coordinate omogenee Spazio delle 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: Il passaggio dallo spazio omogeneo e lo spazio 3D: solitamente si sceglie w=1
Coordinate omogenee Utilizzando le coordinate omogenee le trasformazioni necessarie alla modellazione possono essere espresse come matrici 4x4 In particolare la traslazione viene espressa come
Traslazione
Rotazione
Rotazione rotazione attorno all’origine rotazione attorno al centro dell’oggetto: prima traslare poi ruotare poi contro-traslare
Scala
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
Trasformazione del corpo rigido Per i corpi rigidi la matrice di trasformazione può essere espressa come la concatenazione di una traslazione e una rotazione
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
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
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 C p q M q p C(B(A))
Le trasformazioni per modellare Da oggetti prototipo a loro “istanze” Tre trasformazioni nell’ordine: Scala Rotazione Traslazione Minst=T(R(S))
Trasformazioni di Eulero y x head pitch roll
Trasformazioni di Eulero Le trasformazioni di Eulero sono costruite come moltiplicazione di matrici di rotazione intorno ai tre assi L’inversa della trasformazione può essere calcolata come
Gimbal Lock Avviene quando le rotazioni sono concatenate in modo tale che un grado di libertà venga perso. Esempio: rotazione di 90° intorno all’asse x volendo ruotare intorno a z, a causa della rotazione precedente, otterremo una rotazione intorno a y
Gimbal Lock Esempio
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
Rotazione intorno ad un asse generico Per ruotare un punto intorno ad un asse generico effettuo un cambiamento di sistema di riferimento e utilizzo le matrici di rotazione note x z y r t s y x z y r t s s r x t z
Rotazione intorno ad un asse generico