+ All Categories
Home > Documents > 1 Lavorare con le matrici in OGL Daniele Marini. 2 Frames Il frame è un contesto di sistema di...

1 Lavorare con le matrici in OGL Daniele Marini. 2 Frames Il frame è un contesto di sistema di...

Date post: 02-May-2015
Category:
Upload: concettina-magnani
View: 213 times
Download: 1 times
Share this document with a friend
24
1 Lavorare con le matrici in OGL Daniele Marini
Transcript
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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

24

glPushMatrix();/* crea trasformazione di istanza */glTranslateF(…);glRotatef(…);glScalef(…);/* disegna l’oggetto */…glPopMatrix();/* ricrea la CTM */


Recommended