Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Lavorare con le matrici in OGL
Daniele Marini
2
Frames Il frame è un contesto di sistema di riferimento e di trasformazioni geometriche associate Usualmente si distinguono due frame principali: World frame, nel quale si descrivono e rappresentano gli oggetti modellati Camera frame, nel quale si definisce il sistema di riferimento necessario alla creazione della proiezione
3
Camera frame OpenGL adotta la metafora della macchina fotografica: la formazione dell’immagine piana a partire dal modello 3D avviene con un principio di proiezione simile a quello della fotografia Il sistema di riferimento del camera frame si assume fisso: Origine in basso a sinistra del fotogramma X crescente a destra Y crescente in verticale Z entrante nella macchina fotografica
6
questo e’ l’ordine con cui vanno specificate le trasformazioni nel programma
le trasformazioni nella fase di rendering sono eseguite con un’altro ordine
8
Gli oggetti sono creati rispetto a questo sistema di riferimento
Nella figura sinistra i due frame coincidono, con questa configurazione la trasformazione prospettica risulta semplificata, “canonica” - gli oggetti sono fuori campo! Gli oggetti sono definiti nello stesso frame, per vederli occorre traslare o la camera o gli oggetti Equivalentemente si trasla il camera frame rispetto al world frame o viceversa
9
La model-view matrix nel caso canonico diventa:
Trasla un punto nel world frame di -d rispetto al camera frame (figura destra) La funzione è glLoadMatrix
10
Trasformazioni affini nello spazio di coordinate omogenee
Matrici 4x4: 16 gradi di libertà apparenti 12 gradi di libertà effettivi
11
Trasformare vettori o punti
Vettore come differenza di due punti Trasformazione affine di vettori: 9 gradi di libertà
12
La trasformazione affine conserva le rette
Possiamo descrivere un poliedro con i suoi vertici, facce e spigoli, ma possiamo trasformare soltanto i vertici!
13
Concatenazione di trasformazioni
Trasformiamo il punto p con una sequenza di rasformazioni A,B,C (associatività):
14
Se applichiamo a ogni punto separatamente le matrici:
Se prima calcoliamo la matrice M: A B C q p C(B(A)) M q p
15
Rotazione attorno a punto generico
16
La matrice M
17
Trasformazioni per modellare: instance transformation
Da oggetti prototipo a loro “istanze” Tre trasformazioni nell’ordine: Scala Rotazione Traslazione Minst=T(R(S)) Un oggetto può essere istanziato più volte ma nella display list ha un’unica occorrenza
18
Rotazione attorno a un asse qualsiasi
19
vettore unitario, d lunghezza proiezione, ai coseni direttori, qi angoli di rotazione
21
OpenGl Current Transformation Matrix CTM: è la matrice che viene applicata a ogni vertice di una scena - successivo alla sua definizione Se si cambia CTM si cambia lo stato del sistema Inizialmente posta a identità: CTM := I Viene modificata o per assegnamento o per pre - post -moltiplicazione glLoadMatrixf(pointer_to_matrix) glLoadIdentity() glRotatef(angle, vx, vy, vz) glTranslatef(dx, dy, dz) glScale(sx, sy, sz)
22
Rotazione attorno a un punto
glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(4.0, 5.0, 6.0); glRotatef(45.0, 1.0, 2.0, 3.0); /* esegue la rotazione attorno a un asse generico */ glTranslatef(-4.0, -5.0, -6.0); Ogni vertice specificato dopo queste dichiarazioni viene trasformato con questa matrice
23
Stack di matrici Si può modificare una CTM con la:
glMultMatrixf(myarray) Durante la modellazione si creano matrici di istanza, applicata a un solo oggetto e non all’intera scena, in tal caso la CTM della scena viene posta nello stack
24
glPushMatrix(); /* crea trasformazione di istanza */ glTranslateF(…); glRotatef(…); glScalef(…); /* disegna l’oggetto */ … glPopMatrix(); /* ricrea la CTM */
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.