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