La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Lavorare con le matrici in OGL

Presentazioni simili


Presentazione sul tema: "Lavorare con le matrici in OGL"— Transcript della presentazione:

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

4

5

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

7

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

20

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 */


Scaricare ppt "Lavorare con le matrici in OGL"

Presentazioni simili


Annunci Google