le trasformazioni 3d - di.unito.itmarcog/ig2/2005/l05.pdf · tipi di trasformazioni base in grafica...

8
Informatica Grafica ][ Marco Gribaudo [email protected] Le trasformazioni 3D Le trasformazioni in 3D Come abbiamo visto in precedenza, vi sono tre tipi di trasformazioni base in grafica 3D: Traslazione Rotazione Variazione di scala Le trasformazioni in 3D In questa lezione esamineremo le corrispondenze tra le trasformazioni effettuabili in Maya ed in Visual Basic. Inizieremo a considerare il caso in cui il punto pivot degli oggetti (il centro della trasformazione, ci torneremo in seguito) sia centrato con l'origine degli assi, quindi vedremo come trattare i casi dove questa condizione non si verifica. Inizialmente considereremo trasformazioni singole, poi vedremo come concatenarle correttamente. Le trasformazioni in 3D Per poter effettuare delle trasformazioni occorre definire due nuove matrici: Le trasformazioni in 3D La matrice matWorld contiene la trasformazione finale. La matrice matTemp viene utilizzata come contenitore temporaneo in cui memorizzare le trasformazioni elementari necessarie per definire una trasformazione composta. Le trasformazioni in 3D I comandi che effettuano le trasformazioni devono essere inseriti all'interno del ciclo di rendering prima dell'effettiva visualizzazione delle primitive:

Upload: hoangthuan

Post on 15-Feb-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Le trasformazioni 3D - di.unito.itmarcog/IG2/2005/L05.pdf · tipi di trasformazioni base in grafica 3D: Traslazione Rotazione Variazione di scala Le trasformazioni in 3D In questa

Informatica Grafica][

Marco [email protected]

Le trasformazioni 3D

Le trasformazioni in 3DCome abbiamo visto in precedenza, vi sono tre tipi di trasformazioni base in grafica 3D:

TraslazioneRotazioneVariazione di scala

Le trasformazioni in 3DIn questa lezione esamineremo le corrispondenze tra le trasformazioni effettuabili in Maya ed in Visual Basic.

Inizieremo a considerare il caso in cui il punto pivot degli oggetti (il centro della trasformazione, ci torneremo in seguito) sia centrato con l'origine degli assi, quindi vedremo come trattare i casi dove questa condizione non si verifica.

Inizialmente considereremo trasformazioni singole, poi vedremo come concatenarle correttamente.

Le trasformazioni in 3DPer poter effettuare delle trasformazioni occorre definire due nuove matrici:

Le trasformazioni in 3DLa matrice matWorld contiene la trasformazione finale.

La matrice matTemp viene utilizzata come contenitore temporaneo in cui memorizzare le trasformazioni elementari necessarie per definire una trasformazione composta.

Le trasformazioni in 3DI comandi che effettuano le trasformazioni devono essere inseriti all'interno del ciclo di rendering prima dell'effettiva visualizzazione delle primitive:

Page 2: Le trasformazioni 3D - di.unito.itmarcog/IG2/2005/L05.pdf · tipi di trasformazioni base in grafica 3D: Traslazione Rotazione Variazione di scala Le trasformazioni in 3D In questa

Le trasformazioni in 3DPrima di iniziare il processo di trasformazione bisogna creare una nuova matrice di trasformazione neutra:

Le trasformazioni in 3DQuindi si effettuano tutte le operazioni di trasformazione (vedremo fra poco come)

Le trasformazioni in 3DEd infine si imposta la trasformazione:

Le trasformazioni in 3DTutte le primitive disegnate da questo punto in poi, verrano spostate, translate e scalate in base a quanto specificato dalla trasformazione.

Le traslazioniLa traslazione sposta gli oggetti parallelamente nello spazio.

Le traslazioniTramite una singola traslazione e' possibile spostare un oggetto lungo tutte le tre direzioni degli assi cartesiani.

Page 3: Le trasformazioni 3D - di.unito.itmarcog/IG2/2005/L05.pdf · tipi di trasformazioni base in grafica 3D: Traslazione Rotazione Variazione di scala Le trasformazioni in 3D In questa

Le traslazioniIn Maya si puo' specificare l'entita' del movimento lungo i tre assi nei parametri Translate X, Translate Y e Translate Z del Channel Box.

Le traslazioniNelle DirectX e' possibile creare una matrice di Traslazione attraverso il comando:

Le traslazioniI parametri passati al comando (in questo caso 0,0,1.5), specificano rispettivamente l'entita della translazione lungo gli assi x, y e z. matTemp identifica invece la matrice in cui memorizzare la trasformazine.

Le traslazioniIl comando D3DMatrixMultiply, concatena la trasformazione appena creata (e memorizzata in matTemp), alla trasformazione complessiva (memorizzata in matWorld). In questo modo la traslazione potra' fare parte di una trasformazione composta.

Le variaizoni di scalaLa variazione di scala ingrandisce o rimpicciolisce un'oggetto.

Le variaizoni di scalaEssa puo' operare con entita' differenti lungo i diversi assi.

Page 4: Le trasformazioni 3D - di.unito.itmarcog/IG2/2005/L05.pdf · tipi di trasformazioni base in grafica 3D: Traslazione Rotazione Variazione di scala Le trasformazioni in 3D In questa

Le variaizoni di scalaIn Maya si puo' specificare l'entita' della variazione di scala lungo i tre assi, attraverso i parametri Scale X, Scale Y e Scale Z del Channel Box.

Le variaizoni di scalaIl valore assegnato al parametro di scala e' un fattore per il quale vengono moltiplicate le coordinate dei vertici dell'oggetto. In pratica puo' avere i seguenti utilizzi (tutte le affermazioni sono relative all'asse a cui la trasformazione viene applicata):1: l'oggetto mantiene le sue dimensioni originali >1: l'oggetto viene ingrandito (2 raddopiato, 3 triplicato, etc)<1: l'oggetto viene rimpicciolito(0.5= 1/2 dimezzato, 0.25=1/4 ridotto ad un quarto)0: l'oggetto viene "appiattito"negativo: l'oggetto viene ribaltato

Le variaizoni di scalaTramite DirectX e' possibile creare una matrice che opera una variazione di Scala contemporaneamente lungo i tre assi utilizzando il comando:

Le variaizoni di scalaI parametri passati al comando (in questo caso 0.5,0.5,0.5), specificano rispettivamente l'entita della variazione di scala lungo gli assi x, y e z.

Le rotazioniLe rotazioni ruotano un oggetto nello spazio.

Le rotazioniLe rotazioni possono avvenire lungo i 3 assi coordinati.

Page 5: Le trasformazioni 3D - di.unito.itmarcog/IG2/2005/L05.pdf · tipi di trasformazioni base in grafica 3D: Traslazione Rotazione Variazione di scala Le trasformazioni in 3D In questa

Le rotazioniIn Maya si spossono specificare attraverso i parametri Rotate X, Rotate Y e Rotate Z del Channel Box. L'unita' di misura utilizzata sono i gradi.

Le rotazioniUtilizzando DirectX e' possibile creare una matrice di Rotazione lungo l'asse y attraverso il comando:

Le rotazioniL'angolo di rotazione deve essere specificato in radianti. Occorre quindi trasformare tale valore da gradi a radianti, moltiplicandolo per π e dividendolo per 180.

Le rotazioniEsistono comandi analoghi per creare matrici di rotazione lungo gli assi x e z:

D3DXMatrixRotationXD3DXMatrixRotationYD3DXMatrixRotationZ

Comporre le trasforamzioniCome visto nel precedente corso di I.G.1, l'ordine in cui si effettuano le trasformazioni non e' indifferente!

Eseguire una rotazione prima o dopo una translazione, ad esempio, puo' dare origine ad effetti totalmente differenti!

Comporre le trasforamzioniL'ordine comunemente adottato nel concatenare le trasformazioni e' il seguente:

1) Variazioni di scala2) Rotazioni3) Traslazioni

Page 6: Le trasformazioni 3D - di.unito.itmarcog/IG2/2005/L05.pdf · tipi di trasformazioni base in grafica 3D: Traslazione Rotazione Variazione di scala Le trasformazioni in 3D In questa

Comporre le trasforamzioniCon le DirectX, le trasformazioni si indicano in sequenza diretta (in altre librerie occorre specificarle in ordine inverso).

Comporre le trasforamzioniCome visto in precedenza, il comando D3DMatrixMultiply, costruisce la trasformazione composta, aggiungendo la trasformazione definita in matTemp, a quella specificata in matWorld.

Comporre le trasforamzioniParticolare cura va utilizzata nel definire l'ordine delle trasformazioni di rotazione. Software come Maya, ad esempio, permettono infatti di specifare l'ordine desiderato:

Il "Gimbal Lock"La composizione di trasformazioni di rotazione, puo' dare origine ad un fenomeno detto Gimbal Lock.

Tale fenomeno stabilisce che, con particolari angoli di rotazione, due assi arrivino a coincidere perdendo di fatto un grado di liberta' nel posizionamento di un oggetto.

z x

y

Il "Gimbal Lock"Supponiamo ad esempio che il nostro oggetto modelli un'aereplano. La sua punta e' orientata verso l'asse z, le sue ali lungo l'asse x, e la sua pinna lungo l'asse y.

Il "Gimbal Lock"La rotazione lungo l'asse y definisce la direzione dell'aereo, quella lungo l'asse x la picchiata, e quella lungo l'asse z la rotazione su se stesso.

Tali angoli vengono detti angoli di Eulero.

Quando la direzione di un oggetto e' specificata utilizzando gli angoli di Eulero, le rotazioni si effettuano nell'ordine z, x e y.

Page 7: Le trasformazioni 3D - di.unito.itmarcog/IG2/2005/L05.pdf · tipi di trasformazioni base in grafica 3D: Traslazione Rotazione Variazione di scala Le trasformazioni in 3D In questa

Il "Gimbal Lock"Quando la rotazione che identifica la picchiata (quella lungo l'asse x) vale 90 gradi, si verifica il Gimbal Lock.

In questo caso le rotazioni lungo gli assi y e z vengono a coincidere.

Si vengono quindi a creare particolari posizioni dell'oggetto che non possono essere raggiunte!

z

x

y

Il "Gimbal Lock"Dopo aver ruotato di 90 gradi lungo l'asse x, le rotazioni lungo l'asse z e lungo l'asse y coincidono!

Il "Gimbal Lock"Con questo tipo di trasformazione, alcune particolari posizioni come questa risultano irraggiungibili.

Il punto PivotCome visto nel corso di I.G.1, le trasformazioni di rotazione e scala avvengono sempre riferite ad un centro.

Tale centro prende il nome di Punto Pivot.

Prima di effettuare una qualunque trasformazione e' sempre possibile modificare la posizione del punto Pivot.

Il punto PivotIn Maya e' possibile modificare la posizione del punto Pivot di un'oggetto, selezionando la modalita' di traslazione (tasto w) e premendo il tasto INS.

Il punto PivotNotare come i manipolatori di movimento cambino e scompaiano le freccie.

Page 8: Le trasformazioni 3D - di.unito.itmarcog/IG2/2005/L05.pdf · tipi di trasformazioni base in grafica 3D: Traslazione Rotazione Variazione di scala Le trasformazioni in 3D In questa

Il punto PivotLe successive trasformazioni di rotazione o scala saranno riferite a questo nuovo centro.

Il punto PivotIn Maya e' possibile visualizzare le coordinate del punto Pivot selezionando l'oggetto ed aprendo l'attribute editor alla voce Pivots:

Il punto PivotCon le DirectX la variazione del punto Pivot si effettua applicando due traslazioni.

La prima si applica all'inizio della catena di trasformazioni, prima delle rotazioni e dei cambiamenti di scala. Essa porta il punto Pivot a coincidere con l'origine degli assi.

La seconda si applica al termine delle trasformazioni di rotazione e variazione di scala. Il suo compito e' quello di riportare il punto Pivot nella sua posizione originale.

Il punto PivotSupponiamo di voler impostare come punto Pivot il vertice di coordinate (-3,1,0).

Il punto PivotPrima di effettuare le trasformazioni di rotazione e scala occorre traslare l'oggetto di una quantita' pari all'opposto delle coordinate del punto Pivot: in questo caso (3,-1,0) - cambiano i segni di tutte le coordinate.

Il punto PivotDopo aver effettutato le rotazioni e le variazioni di scala si deve riposizionare il punto Pivot, effettuando una traslazione di entita' pari alle sue coordinate: in questo caso (-3,1,0).