1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il...
-
Upload
caj-giusti -
Category
Documents
-
view
215 -
download
0
Transcript of 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il...
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