1 controllare la prospettiva daniele marini. 2 z x y p (x,y,z) p(x v,y v ) piano di proiezione...
TRANSCRIPT
![Page 1: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/1.jpg)
1
Controllare la prospettiva
Daniele Marini
![Page 2: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/2.jpg)
2
z
x
yP(x,y,z)
P(xv,yv)
Piano di proiezione
Calcolo analitico
Centro di proiezione
![Page 3: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/3.jpg)
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
![Page 4: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/4.jpg)
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
![Page 5: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/5.jpg)
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
![Page 6: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/6.jpg)
6
![Page 7: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/7.jpg)
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
![Page 8: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/8.jpg)
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
![Page 9: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/9.jpg)
9
Orientare il piano di proiezione
![Page 10: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/10.jpg)
10
Definire la viewport e la window
![Page 11: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/11.jpg)
11
Definire il centro di proiezione
![Page 12: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/12.jpg)
12
Se la proiezione è parallela
![Page 13: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/13.jpg)
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
![Page 14: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/14.jpg)
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
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
![Page 15: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/15.jpg)
15
Dalle coordinate omogenee allo spazio 3D
xp =xz/d
yp =yz/d
zp =zz/d
=d
![Page 16: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/16.jpg)
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
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
![Page 17: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/17.jpg)
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
![Page 18: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/18.jpg)
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
![Page 19: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/19.jpg)
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
![Page 20: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/20.jpg)
20
Proiezioni parallele oblique
Angoli del fascio di proiettori con la normale al piano di proiezione
DOP
y
x
z
![Page 21: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/21.jpg)
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
![Page 22: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/22.jpg)
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(θ,φ)
![Page 23: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/23.jpg)
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
![Page 24: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/24.jpg)
24
Angolo di visione e frustum
![Page 25: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/25.jpg)
25
Funzioni di OpenGLglFrustum(xmin, xmax, ymin, ymax, near, far);
gluPerspective(fovy, aspect, near, far);Aspect = larghezza/altezza della windowFov:
![Page 26: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/26.jpg)
26
Prospettiva generica
• Metodo della projection normalization– Creare la matrice di normalizzazione– Deformare lo spazio– Proiettare in modo ortografico
![Page 27: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/27.jpg)
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
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
![Page 28: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/28.jpg)
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
⎛
⎝ ⎜
⎞
⎠ ⎟
![Page 29: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/29.jpg)
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
![Page 30: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/30.jpg)
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
![Page 31: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/31.jpg)
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
![Page 32: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/32.jpg)
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
![Page 33: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/33.jpg)
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”
![Page 34: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/34.jpg)
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);
![Page 35: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/35.jpg)
35
![Page 36: 1 Controllare la prospettiva Daniele Marini. 2 z x y P (x,y,z) P(x v,y v ) Piano di proiezione Calcolo analitico Centro di proiezione](https://reader035.vdocuments.mx/reader035/viewer/2022062418/5542eb6a497959361e8d6919/html5/thumbnails/36.jpg)
36
Roll, pitch (head), yaw