1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione...

36
1 Controllare la prospettiva Daniele Marini

Transcript of 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione...

Page 1: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

1

Controllare la prospettiva

Daniele Marini

Page 2: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

2

z

x

yP(x,y,z)

P(xv,yv)

Piano di proiezione

Calcolo analitico

Centro di proiezione

Page 3: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

3

z

y

Piano di proiezioned

P(x,y,z)

yv

y/yv = z/dyv = y/(z/d)

x/xv = z/dxv = x/(z/d)

... in sezione ...

Centro di proiezione

Page 4: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

4

Frames

• Il frame è un contesto di:– sistema di riferimento – e 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 5: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

5

Camera frame• Quasi tutti gli ambienti e le librerie adottano 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

• L’obiettivo non è modellato (foro stenopeico)• 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 o uscente dalla macchina fotografica

Page 6: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

6

Page 7: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

7

Prospettiva canonica

• Camera frame orientato come il world frame

• Asse ottico coincidente con asse z, entrante nell’obiettivo

• Per portare una scena nella configurazione canonica è necessaria una catena di trasformazioni da applicare conoscendo i parametri principali

Page 8: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

8

I parametri di controllo• PRP Projection Reference Point o COP Center of

Projection• View Plane• VPN View Plane Normal• VUP View UP• DOP Direction of Projection (per le proiezioni

parallele)• VRP View Reference Point• CW center of the window

Page 9: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

9

Orientare il piano di proiezione

Page 10: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

10

Definire la viewport e la window

Page 11: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

11

Definire il centro di proiezione

Page 12: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

12

Se la proiezione è parallela

Page 13: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

13

• Dati VPN, VUP si ottiene la view orientation view orientation matrixmatrix V

• La forma della V è: V=TR con T traslazione nel VRP, R rotazione opportuna per orientare la view rispetto alla configurazione canonica

Trasformazioni normalizzateTrasformazioni normalizzate

Page 14: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

14

Matrice canonica di trasformazione prospettica

M =

1 0 0 0

0 1 0 0

0 0 1 0

0 0 1/d 0

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

p =

x

y

z

1

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

* M = q =

x

y

z

z /d

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

Page 15: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

15

Dalle coordinate omogenee allo spazio 3D

xp =xz/d

yp =yz/d

zp =zz/d

=d

Page 16: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

16

Matrice canonica di proiezione parallela ortogonale

M=

1 0 0 0

0 1 0 0

0 0 0 0

0 0 0 1

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

p=

x

y

z

1

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

* M=q=

x

y

0

1

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

Page 17: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

17

Funzioni di OpenGL - proiezione parallela ortogonale

glOrtho(xmin, xmax, ymin, ymax, near, far);

near e far possono essere anche negativi: non c’e’ divisione per 0

Page 18: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

18

• Trasla origine del view volume nell’origine del view volume canonico• Riscala il view volume• P è la matrice di proiezione• zmax = far• zmin = near• completata la trasformazione si può chiamare la glOrtho

Page 19: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

19

glOrtho(xmin, xmax, ymin, ymax, near, far);

P =ST=

2xmax−xmin

0 0 −xmax+xminxmax−xmin

02

ymax−ymin0 −

ymax+yminymax−ymin

0 02

zmax−zmin−zmax+zminzmax−zmin

0 0 0 1

⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥

traslazioneal centro delview volumescalatura

Page 20: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

20

Proiezioni parallele oblique

Angoli del fascio di proiettori con la normale al piano di proiezione

DOP

y

x

z

Page 21: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

21

Proiezioni parallele oblique

• orientare la direzione di proiezione in modo che sia parallela a z, con trasformazione di shear controllata dagli angoli

• rinormalizzare il view volume con scala e traslazione (come sopra)

• proiettare con la matrice ortografica

Page 22: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

22

Trasformazione di shear e proiezione parallela ortogonale

H =

1 0 −cotθ 0

0 1 −cotφ 0

0 0 1 0

0 0 0 1

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

P =MorthoSTH(θ,φ)

Page 23: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

23

Proiezione parallela generica

• Deformare il volume con shear per condursi a ortogonale

• Ricondursi alla configurazione canonica: normalizzazione

– Convertire il volume di vista in una configurazione standard: costruzione della matrice di proiezione: opera in “window coordinates” (comprendono z)

– Proiettare il volume deformato

• Il volume canonico

per la proiezione parallela

è normalizzato in -1,+1

Page 24: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

24

Angolo di visione e frustum

Page 25: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

25

Funzioni di OpenGLglFrustum(xmin, xmax, ymin, ymax, near, far);

gluPerspective(fovy, aspect, near, far);Aspect = larghezza/altezza della windowFov:

Page 26: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

26

Prospettiva generica

• Metodo della projection normalization– Creare la matrice di normalizzazione– Deformare lo spazio– Proiettare in modo ortografico

Page 27: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

27

Prospettiva generica (cont)

• Si suppone di proiettare in modo canonico con la distanza del centro di proiezione

d=-1 lungo l’asse z

• la matrice Mpersp diventa:

M persp =

1 0 0 0

0 1 0 0

0 0 1 0

0 0 −1 0

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

Page 28: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

28

Prospettiva generica (cont)

• applichiamo a un punto la matrice non singolare N (simile a Mpersp)

N =

1 0 0 0

0 1 0 0

0 0 α β

0 0 −1 0

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

x'= x; y'= y; z'= αz + β; w'= −z

x"= −x

z; y"= −

y

z; z"= − α +

β

z

⎝ ⎜

⎠ ⎟

Page 29: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

29

Prospettiva generica (cont)

• dobbiamo determinare • assumiamo un angolo di visione di 90°• quindi i piani di clipping laterali sono:

x=+-z y=+-z• dopo la trasformazione i piani diventano:

x=+-1 y=+-1• i piani di clipping frontale e di sfondo siano:

zmin<zmax<0• vogliamo imporre che siano in -1 e +1 per avere il

volume canonico

Page 30: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

30

Prospettiva generica (cont)

• zmin e zmax dopo la trasformazione diventano:

z"min = − α +β

zmin

⎝ ⎜

⎠ ⎟

z"max = − α +β

zmax

⎝ ⎜

⎠ ⎟

se poniamo

α =zmax + zmin

zmax − zmin

; β =2zmaxzmin

zmax − zmin

i piani di clipping vengono trasformati in :

zmin → −1

zmax →1

Page 31: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

31

N =

1 0 0 0

0 1 0 0

0 0zmax+zminzmax−zmin

2zmax* zminzmax−zmin

0 0 −1 0

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

P =MorthoN

Mortho=

1 0 0 0

0 1 0 0

0 0 0 0

0 0 0 1

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

Prospettiva generica (cont)

la matrice N viene chiamata matrice di normalizzazione prospettica

Page 32: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

32

Prospettiva generica (cont)

• se il frustum non fosse simmetrico e a 90° ci si può ricondurre a questo caso con una trasformazione di shear

Page 33: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

33

Altri schemi

• Lo schema illustrato è tipico delle librerie PHIGS, GKS 3D

• OpenGl offre anche un altro approccio: lookAt

• Nei simulatori di volo si adotta lo schema “roll, pitch, yaw”

Page 34: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

34

LookAt

• E’ un metodo più diretto e più naturale: – la camera è localizzata in un punto e (eypoint - o punto di

vista) specificato nel world frame– La camera è orientata nella direzione individuata dal vettore

congiungente e con il punto a (at point - punto osservato)

• I punti e ed a individuano il VRP e la VPN• Gli ultimi tre parametri identificano il VUP

gluLookAt(eyex, eyey, eyez, aty, atx, atz, upx, upy, upz);

Page 35: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

35

Page 36: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione.

36

Roll, pitch (head), yaw