1 Lavorare con le matrici in OGL Daniele Marini. 2 Frames Il frame è un contesto di sistema di...
-
Upload
concettina-magnani -
Category
Documents
-
view
218 -
download
1
Transcript of 1 Lavorare con le matrici in OGL Daniele Marini. 2 Frames Il frame è un contesto di sistema di...
![Page 1: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/1.jpg)
1
Lavorare con le matrici in OGL
Daniele Marini
![Page 2: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/2.jpg)
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
![Page 3: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/3.jpg)
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
![Page 4: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/4.jpg)
4
![Page 5: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/5.jpg)
5
![Page 6: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/6.jpg)
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
![Page 7: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/7.jpg)
7
![Page 8: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/8.jpg)
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 gli
oggetti sono fuori campo!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
![Page 9: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/9.jpg)
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
1 0 0 0
0 1 0 0
0 0 1 −d
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
![Page 10: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/10.jpg)
10
Trasformazioni affini nello spazio di coordinate omogenee
• Matrici 4x4: 16 gradi di libertà apparenti
• 12 gradi di libertà effettivi
A=
a1,1 a1,2 a1,3 a1,4
a2,1 a2,2 a1,3 a2,4
a3,1 a3,2 a1,3 a3,4
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
; p=
pxpypz1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
![Page 11: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/11.jpg)
11
Trasformare vettori o punti
• Vettore come differenza di due punti
• Trasformazione affine di vettori: 9 gradi di libertà
v=
v1
v2
v3
0
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
; u=vA
![Page 12: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/12.jpg)
12
La trasformazione affine conserva le rette
p(t) =tp0 +(1−t)p1
Ap(t) =tAp0 +(1−t)Ap1
Possiamo descrivere un poliedro con i suoi vertici, facce e spigoli, ma possiamo trasformare soltanto i vertici!
![Page 13: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/13.jpg)
13
Concatenazione di trasformazioni
• Trasformiamo il punto p con una sequenza di rasformazioni A,B,C (associatività):
q=CBAp
q=C(B(AP))
M=CBA
![Page 14: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/14.jpg)
14
• Se applichiamo a ogni punto separatamente le matrici:
• Se prima calcoliamo la matrice M:
A B Cp q
M qp
C(B(A))
![Page 15: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/15.jpg)
15
Rotazione attorno a punto genericoM=T(pf )Rz(ϑ )T(−pf )
T(pf )=
1 0 0 xf0 1 0 yf0 0 1 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
T(−pf ) =
1 0 0 −xf0 1 0 −yf0 0 1 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
Rz(ϑ ) =
cosϑ −sinϑ 0 0
sinϑ cosϑ 0 0
0 0 1 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
![Page 16: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/16.jpg)
16
La matrice M
M=
cosϑ −sinϑ 0 xf −xf cosϑ +yfsinϑ
sinϑ cosϑ 0 yf −xfsinϑ −yf cosϑ
0 0 1 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
![Page 17: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/17.jpg)
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
![Page 18: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/18.jpg)
18
Rotazione attorno a un asse qualsiasi
![Page 19: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/19.jpg)
19
vettore unitario, d lunghezza proiezione, ai coseni direttori, i angoli di rotazione
![Page 20: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/20.jpg)
20
Rx(ϑx) =
1 0 0 0
0azd
−ayd
0
0ayd
azd
0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥ ⎥
Ry(ϑy) =
d 0 −ax 0
0 1 0 0
ax 0 d 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
........
M=T(p0) Rx −ϑ x( ) Ry −ϑ y( ) Rz ϑ( ) Ry ϑy( ) Rx ϑ x( ) T −p0( ){ }{ }{ }{ }
⎧ ⎨ ⎩
⎫ ⎬ ⎭
⎧ ⎨ ⎩
⎫ ⎬ ⎭
![Page 21: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/21.jpg)
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)
![Page 22: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/22.jpg)
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
![Page 23: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/23.jpg)
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
![Page 24: 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.](https://reader035.fdocumenti.com/reader035/viewer/2022070312/5542eb5a497959361e8c6ec7/html5/thumbnails/24.jpg)
24
glPushMatrix();/* crea trasformazione di istanza */glTranslateF(…);glRotatef(…);glScalef(…);/* disegna l’oggetto */…glPopMatrix();/* ricrea la CTM */