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

Post on 02-May-2015

215 views 0 download

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

1

Controllare la prospettiva

Daniele Marini

2

z

x

yP(x,y,z)

P(xv,yv)

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

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

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

6

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

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

9

Orientare il piano di proiezione

10

Definire la viewport e la window

11

Definire il centro di proiezione

12

Se la proiezione è parallela

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

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

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

15

Dalle coordinate omogenee allo spazio 3D

xp =xz/d

yp =yz/d

zp =zz/d

=d

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

⎢ ⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥ ⎥

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

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

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

20

Proiezioni parallele oblique

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

DOP

y

x

z

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

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(θ,φ)

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

24

Angolo di visione e frustum

25

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

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

26

Prospettiva generica

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

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

⎢ ⎢ ⎢ ⎢

⎥ ⎥ ⎥ ⎥

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

⎝ ⎜

⎠ ⎟

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

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

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

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

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”

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

35

36

Roll, pitch (head), yaw