Controllare la prospettiva
Daniele Marini
1
Calcolo analitico
y
P(x,y,z)
Centro di
proiezione
P(xv,yv)
z
x
Piano di proiezione
2
... in sezione ...
y
P(x,y,z)
yv
Centro di
proiezione
z
d
Piano di proiezione
y/yv = z/d
yv = y/(z/d)
x/xv = z/d
xv = x/(z/d)
3
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
4
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
5
6
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
7
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
8
Orientare il piano di proiezione
9
Definire la viewport e la window
10
Definire il centro di proiezione
11
Se la proiezione è parallela
12
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
13
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
14
Dalle coordinate omogenee allo
spazio 3D
x
xp 
z/ d
y
yp 
z /d
z
zp 
d
z/d
15
Matrice canonica di proiezione
parallela 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 

16
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
17
• 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
18
glOrtho(xmin, xmax, ymin, ymax, near, far);
traslazione
al centro del
view volume
scalatura

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


19
Proiezioni parallele oblique
q,f Angoli del fascio di proiettori con la normale al
piano di proiezione
y
DOP
x
z
20
Proiezioni parallele oblique
• orientare la direzione di proiezione in modo
che sia parallela a z, con trasformazione di
shear controllata dagli angoli q,f
• rinormalizzare il view volume con scala e
traslazione (come sopra)
• proiettare con la matrice ortografica
21
Trasformazione di shear e proiezione
parallela ortogonale
1

0
H  
0

0
0
1
0
0
0

 cot f 0

1
0
0
1

 cot q
P  MorthoSTH(q , f )
22
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
23
Angolo di visione e frustum
24
Funzioni di OpenGL
glFrustum(xmin, xmax, ymin, ymax, near, far);
gluPerspective(fovy, aspect, near, far);
Aspect = larghezza/altezza della window
Fov:
25
Prospettiva generica
• Metodo della projection normalization
– Creare la matrice di normalizzazione
– Deformare lo spazio
– Proiettare in modo ortografico
26
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:
1

0

M persp 
0

0
0 0
1 0
0 1
0 1
0

0
0

0
27
Prospettiva generica
(cont)
• applichiamo a un punto la matrice non
singolare N (simile a Mpersp)
1

0

N
0

0
0

0
0  

0 1 0
x' x; y' y; z' z  ; w' z
  
x
y
x"  ; y"  ; z"   

z
z
z 
0
1
0
0
28
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
29
Prospettiva generica
(cont)
• zmin e zmax dopo la trasformazione diventano:

 
z"min   

 zmin 

 
z"max   

z

max 
se poniamo
zmax  z min
2z max zmin

;

zmax  zmin
zmax  zmin
i piani di clipping vengono trasformati in
:
zmin  1
zmax  1
30
Prospettiva generica
(cont)
la matrice N viene chiamata matrice di normalizzazione prospettica
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

31
Prospettiva generica
(cont)
• se il frustum non fosse simmetrico e a 90° ci si
può ricondurre a questo caso con una
trasformazione di shear
32
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”
33
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);
34
35
Roll, pitch (head), yaw
36
Scarica

07_prospettiva