1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il...
-
Upload
caj-giusti -
Category
Documents
-
view
216 -
download
0
Transcript of 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il...
![Page 1: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/1.jpg)
1
Controllare la prospettiva
Daniele Marini
![Page 2: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/2.jpg)
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
![Page 3: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/3.jpg)
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
![Page 4: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/4.jpg)
4
Orientare il piano di proiezione
![Page 5: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/5.jpg)
5
Definire la viewport e la window
![Page 6: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/6.jpg)
6
Definire il centro di proiezione
![Page 7: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/7.jpg)
7
Se la proiezione è parallela
![Page 8: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/8.jpg)
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
![Page 9: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/9.jpg)
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”
![Page 10: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/10.jpg)
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);
![Page 11: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/11.jpg)
11
![Page 12: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/12.jpg)
12
Roll, pitch, yaw
![Page 13: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/13.jpg)
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
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
![Page 14: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/14.jpg)
14
Dalle coordinate omogenee allo spazio 3D
xp =xz/d
yp =yz/d
zp =zz/d
=d
![Page 15: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/15.jpg)
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
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
![Page 16: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/16.jpg)
16
Angolo di visione e frustum
![Page 17: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/17.jpg)
17
Funzioni di OpenGLglFrustum(xmin, xmax, ymin, ymax, near, far);
gluPerspective(fovy, aspect, near, far);Aspect = larghezza/altezza della windowFov:
![Page 18: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/18.jpg)
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
![Page 19: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/19.jpg)
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
![Page 20: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/20.jpg)
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
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥
![Page 21: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/21.jpg)
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
![Page 22: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/22.jpg)
22
Proiezioni parallele oblique
Angoli del fascio di proiettori con la normale al piano di proiezione
![Page 23: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/23.jpg)
23
Trasformazione di shear
H =
1 0 −cotθ 0
0 1 −cotφ 0
0 0 1 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
P =MorthoSTH(θ,φ)
![Page 24: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/24.jpg)
24
Prospettiva generica
• Creare la matrice di normalizzazione
• Deformare lo spazio
• Proiettare in modo ortografico
![Page 25: 1 Controllare la prospettiva Daniele Marini. 2 Prospettiva canonica Camera frame orientato come il world frame Asse ottico coincidente con asse z, entrante.](https://reader035.fdocuments.net/reader035/viewer/2022062418/5542eb6a497959361e8d6911/html5/thumbnails/25.jpg)
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