Controllare la prospettiva

Post on 05-Feb-2016

49 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Controllare la prospettiva. Daniele Marini. Prospettiva canonica. Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante nell’obiettivo - PowerPoint PPT Presentation

Transcript

1

Controllare la prospettiva

Daniele Marini

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

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

4

Orientare il piano di proiezione

5

Definire la viewport e la window

6

Definire il centro di proiezione

7

Se la proiezione è parallela

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

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”

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);

11

12

Roll, pitch, yaw

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

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

14

Dalle coordinate omogenee allo spazio 3D

xp =xz/d

yp =yz/d

zp =zz/d

=d

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

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

16

Angolo di visione e frustum

17

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

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

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

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

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

⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥

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

22

Proiezioni parallele oblique

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

23

Trasformazione di shear

H =

1 0 −cotθ 0

0 1 −cotφ 0

0 0 1 0

0 0 0 1

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

P =MorthoSTH(θ,φ)

24

Prospettiva generica

• Creare la matrice di normalizzazione

• Deformare lo spazio

• Proiettare in modo ortografico

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

top related