Controllare la prospettiva
Daniele Marini
1
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
2
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
3
Orientare il piano di proiezione
4
Definire la viewport e la window
5
Definire il centro di proiezione
6
Se la proiezione è parallela
7
Trasformazioni normalizzate
• Dati VPN, VUP si ottiene la view orientation
matrix V
• La forma della V è: V=TR con T traslazione nel
VRP, R rotazione opportuna per orientare la
view rispetto alla configurazione canonica
8
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”
9
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);
10
11
Roll, pitch, yaw
12
Matrice canonica di trasformazione
prospettica
1

0

M
0

0
0

0
0 1 0

0 1/d 0
x
 x 
 
 
y
y
p   * M  q   
z 
 z 
 
 
1
z / d
0
1
0
0
13
Dalle coordinate omogenee allo
spazio 3D
x
xp 
z/ d
y
yp 
z /d
z
zp 
d
z/d
14
Matrice canonica di trasformazione
ortogonale
1

0
M  
0

0
0
1
0
0
0 0 

0 0 

0 0 
0 1 

x 
x 
 
 
y 
y 
p   * M  q   
z 
0 


1 

1 

15
Angolo di visione e frustum
16
Funzioni di OpenGL
glFrustum(xmin, xmax, ymin, ymax, near, far);
gluPerspective(fovy, aspect, near, far);
Aspect = larghezza/altezza della window
Fov:
17
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
18
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
19
glOrtho(xmin, xmax, ymin, ymax, near, far);

2

xmax  xmin

0

P  ST 


0



0
0
0
2
ymax  ymin
0
0
0
2
zmax  zmin
0
xmax  xmin

xmax  xmin
ymax  ymin 

ymax  ymin 

zmax  zmin 

zmax  zmin 

1


20
• 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
21
Proiezioni parallele oblique
q,f Angoli del fascio di proiettori con la normale al
piano di proiezione
22
Trasformazione di shear
1

0
H  
0

0
0
1
0
0
0

 cot f 0

1
0
0
1

 cot q
P  MorthoSTH(q , f )
23
Prospettiva generica
• Creare la matrice di normalizzazione
• Deformare lo spazio
• Proiettare in modo ortografico
24
1

0
N  
0

0
0
0
1
0
zmax  zmin
0
zmax  zmin
0
1
P  Mortho N
1

0
Mortho  
0

0
0
1
0
0
0
0
0
0

0

0

zmax * zmin 
2
zmax  zmin 

0

0

0

0
1

Ai punti trasformati occorre applicare la divisione
25
Scarica

06_prospettiva