1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il...

25
1 Controllare la prospettiva Daniele Marini

Transcript of 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il...

Page 1: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

1

Controllare la prospettiva

Daniele Marini

Page 2: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

2

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 3: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

3

I parametri di controllo

• PRP Projection Reference Point (COP)

• View Plane

• VPN View Plane Normal

• VUP View UP

• DOP Direction of Projection

• VRP View Reference Point

• CW center of the window

Page 4: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

4

Orientare il piano di proiezione

Page 5: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

5

Definire la viewport e la window

Page 6: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

6

Definire il centro di proiezione

Page 7: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

7

Se la proiezione è parallela

Page 8: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

8

• 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 9: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

9

Altri schemi

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

• OpenGl offre un altro approccio: lookAt

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

Page 10: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

10

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

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

Page 11: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

11

Page 12: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

12

Roll, pitch, yaw

Page 13: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

13

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 14: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

14

Dalle coordinate omogenee allo spazio 3D

xp =xz/d

yp =yz/d

zp =zz/d

=d

Page 15: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

15

Matrice canonica di trasformazione 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 16: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

16

Angolo di visione e frustum

Page 17: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

17

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

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

Page 18: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

18

Funzioni di OpenGL - proiezione parallela

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

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

Page 19: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

19

Proiezione parallela generica

• 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 20: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

20

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

⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥

Page 21: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

21

• 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 22: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

22

Proiezioni parallele oblique

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

Page 23: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

23

Trasformazione di shear

H =

1 0 −cotθ 0

0 1 −cotφ 0

0 0 1 0

0 0 0 1

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

P =MorthoSTH(θ,φ)

Page 24: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

24

Prospettiva generica

• Creare la matrice di normalizzazione

• Deformare lo spazio

• Proiettare in modo ortografico

Page 25: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.

25

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

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

Ai punti trasformati occorre applicare la divisione