Controllare le proiezioni Daniele Marini Corso Di Programmazione Grafica.
-
Upload
bernardetta-ferri -
Category
Documents
-
view
219 -
download
0
Transcript of Controllare le proiezioni Daniele Marini Corso Di Programmazione Grafica.
Controllare le proiezioni
Daniele Marini
Corso Di Programmazione Grafica
2
2 tipi principali
• Proiezioni parallele:– Centro di proiezione all’infinito
• Proiettori ortogonali oppure• Proiettori obliqui• Proiezioni multiple (più viste)• Proiezioni a una sola vista
– Assonometrie– Cavaliera o Cabinet
• Proiezioni prospettiche– Centro di proiezionie a distanza finita
• Un solo punto di fuga: prospettiva centrale• 2 o 3 punti di fuga: prospettiva accidentale
3
Frames
• Il frame è un contesto di:– sistema di riferimento – e trasformazioni geometriche associate
• Consideriamo questi due frame:– 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
Sistemi di riferimento
World frame
Camera frame
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
• Piano di proiezione coincidente con il piano x,y
• Per portare una scena nella configurazione canonica è necessaria una catena di trasformazioni da applicare conoscendo i parametri principali
8
Proiezione generica - 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
(COP)
12
Se la proiezione è parallela
13
Proiezioni parallele
• Si azzera la componente z• Tutta la difficoltà della proiezione
parallela consiste nell’orientare correttamente il modello rispetto al piano di proiezione
14
• Dati VPN, VUP si ottiene la view orientation view orientation matrixmatrix V
• La forma della V è: V=TR • T è la traslazione nel VRP, • R è una rotazione opportuna per orientare
la view rispetto alla configurazione canonica• Con queste trasformazioni ci si porta nella
configurazione canonica
Trasformazioni normalizzateTrasformazioni normalizzate
15
Costruzione della matrice di orientamento di vista V
• Definiamo posizione e orientamento della proiezione nel riferimento world
• Supponiamo di avere (in 4d):• VRP(x,y,z,1)• VPN (nx,ny,nz,1)• VUP (vup_x, vup_y, vup_z,0) punto
all’infinito
16
Costruzione della matrice V
• Poniamo l’origine in VRP, VPN sarà la direzione dell’asse z, da VUP ricaviamo la direzione y, la direzione x si ricava per prodotto vettore tra z e y
• Traslazione in VRP con T(-x,-y-z,1)• Per la rotazione R: per trovare la
direzione y il vettore relativo v deve essere ortogonale a n: n.v=0
17
Costruzione della matrice V
• v è la proiezione di vup sul piano identificato da n, quindi è combinazione lienare di n e vup:
• v=an+bvup
• Ponendo b=1 (vettori normalizzati) si ricava a=-(vup.n/n.n) da cui:
• v=vup- (vup.n/n.n)• Il terzo asse z si ottiene per prodotto:
u=vxn
18
Costruzione della matrice V• Normalizzando tutti i vettori u’,v’,n’, la matrice di rotazione seguente
• Orienta un vettore in u’,v’,n’ rispetto al riferimento originale, quindi trasponiamo per compiere la rotazione desiderata
€
A =
u'x v'x n'x 0
u'y v'y n'y 0
u'z v'z n'z 0
0 0 0 1
⎛
⎝
⎜ ⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟ ⎟
€
R =
u'x u'y u'z 0
v 'x v'y v 'z 0
n'x n'y n'z 0
0 0 0 1
⎛
⎝
⎜ ⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟ ⎟
19
Costruzione della matrice V
• Finalmente la matrice V si ottiene moltiplicando la R per la traslazione T
€
V = RT =
u'x u'y u'z −xu'x −yu'y −zu'zv'x v 'y v'z −xv'x −yv'y −zv'zn'x n'y n'z −xn'x −yn'y −zn'z0 0 0 1
⎛
⎝
⎜ ⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟ ⎟
20
Matrice canonica di proiezione parallela
ortogonale
€
Mortho =
1 0 0 0
0 1 0 0
0 0 0 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
p =
x
y
z
1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
* Mortho = q =
x
y
0
1
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
21
Funzioni di OpenGL - proiezione parallela
ortogonaleglOrtho(xmin, xmax, ymin, ymax, near, far);
Definisce un view volume, rispetto al quale si fa il clipping,
near e far possono essere anche negativi: non c’e’ divisione per 0
22
• La configurazione prevede di essere in condizioni canoniche per l’orientamento, inoltre:• Traslare l’origine del view volume nell’origine del view volume canonico• Riscalare il view volume per normalizzarlo in -1,1• zmax = far• zmin = near• completata la trasformazione si può chiamare la glOrtho• Le coordinate trasformate sono nel riferimento NDC normalized devices coordinates
Parallela ortogonale -2
23
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
Parallela ortogonale - 3
24
Proiezioni parallele oblique
Angoli del fascio di proiettori con la normale al piano di proiezione
DOP
y
x
z
normale
25
Proiezioni parallele oblique - 2
• 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
26
Trasformazione di shear e proiezione parallela obliqua
H =
1 0 −cotθ 0
0 1 −cotφ 0
0 0 1 0
0 0 0 1
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥
P =MorthoSTH(θ,φ)
27
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
28
z
x
yP(x,y,z)
P(xv,yv)
Piano di proiezione
Proiezione prospettica centrale - Calcolo analitico
Centro di proiezione
29
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
30
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
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
31
Dalle coordinate omogenee allo spazio 3D
xp =x
z/ d
yp =y
z/d
zp =z
z/ d=d
32
Prospettiva:Angolo di visione e frustum
33
Prospettiva:Funzioni di OpenGL
glFrustum(xmin, xmax, ymin, ymax, near, far);
gluPerspective(fovy, aspect, near, far);Aspect = larghezza/altezza della windowFovy:angolo di apertura verticale
34
Prospettiva generica
• Metodo della projection normalization– Creare la matrice di normalizzazione– Deformare lo spazio– Proiettare in modo ortografico
35
Prospettiva generica (cont)
• Si suppone di proiettare in modo canonico con la distanza del centro di proiezione
d=-1 lungo l’asse z– Se non siamo in queste condizioni si rototrasla il
sistema e si applica una trasformazione di shear
• la matrice Mpersp canonica è:
€
M persp =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 −1 0
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
36
Prospettiva generica (cont)
• Siano l,r,t,b,n,f i 6 parametri che definiscono il frustum di visione• OGL per operare la proiezione costruisce la matrice:
– In questo schema 0<n<f, quindi il frustum di visione viene traslato nelle z positive
€
P =
2n
r − l0
r + l
r − l0
02n
t − b
t + b
t − b0
0 0 −f + n
f − n−
2 fn
f − n0 0 −1 0
⎛
⎝
⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟
37
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” - “rollio, beccheggio, imbardata”
38
39
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);
40
Trasformazione di vista - LookAt
0 0 0 1
x y z x
x y z y
x y z z
s f up
u s f
s s s e
u u u eM
f f f e
= ×= ×
−⎛ ⎞⎜ ⎟−⎜ ⎟=⎜ ⎟− − − −⎜ ⎟⎝ ⎠
e=(ex,ey,ez)a=(ax,ay,az)up=upx,upy,upz)ftemp=(a-e)f=ftemp/||ftemp||)
Stereo e profondità percepita
• La stereovisualizzazione rafforza gli indizi di profondità
• Nella immagini 2D:• Prospettiva• Dimensioni relative• Dettagli• Occlusioni• Luci e ombre• Velocità relativa
41
Profondità 3D
• Disparità binoculare• Accomodazione• Convergenza• Questi tre indizi devono essere
coerenti tra loro
42
Stereo coppie
• Proiettando stereo coppie si produce disparità interoculare
• Questo indizio è in conflitto con l’accomodamento perché la messa a fuoco avviene su un medesimo piano
• Il conflitto di accomodamento si è verificato essere tollerabile se la distanza di separazione massima sul piano immagine resta entro un intervallo di 1/30 della distanza dal piano immagine
43
Visione “al di là dello schermo”
• Nello schema l’oggetto appare dietro lo schermo; i punti generati dalle due proiezioni sono sul lato relativo all’occhio corrispondente
• Parallasse positiva; massima parallasse per il punto all’infinito; è pari alla distanza interoculare
44
Visione “al di qua dello schermo”
• Parallasse negativa
• Parallasse pari alla distanza interoculare quando il punto si trova a metà della distanza dal piano di proiezione
45
Visione “sul piano schermo”
• Si ha parallasse nulla e il punto viene proiettato senza disparità sul piano immagine
46
Tecniche di calcolo della stereo proiezione: toe-in
scorretta• Toe in: due proiezioni prospettiche da due
punti separati dalla distanza interoculare (circa 65 mm)
• Introduce anche una parallasse verticale fastidiosa
47
Tecniche di calcolo della stereo proiezione: off-axis
corretta• Due proiezioni con assi tra loro
paralleli; richiede un trimming dell’immagine per considerare solo la parte comune
48
Confronto
• Il metodo toe-in introduce una parallasse verticale; si implementa facilmente e tutte le librerie grafiche lo supportano
• Il metodo off-axis non produce parallasse verticale; non tutte le librerie lo supportano. OpenGl sì!
49
Parametri
• Il grado di effetto stereo dipende dalla distanza del centro di proiezione dal piano e dalla separazione
• In generale un buon effetto non faticoso richiede separazione pari a 1/20 della distanza dal piano
• Inoltre occorre evitare che la parallasse superi la distanza interoculare
50
Angolo di parallasse
= 2 atan(DX / 2d)
51
52
Trimming
• Per calcolare il trimming nel metodo off-axis
= e.w / [2f0 tan(/2)]
• dove: e distanza interoculare
• w larghezza immagine
• fo lunghezza focale (a parallasse 0)
angolo apertura desiderato
53
Trimming
• Dopo il trimming l’angolo di apertura effettivo è:
’ atan([(w+ ) tan(w• Notare che OpenGL usa un angol di
apertura verticale non orizzontale, occorre calcolarselo!
54
55
Stereo e OpenGL
• Con OGL per creare una coppia stereo si usano le funzioni glFrustum.
• Se si usasse gluLookAt si applicherebbe il metodo toe-in
• Nella cartella doc trovate una presentazione ben fatta sul calcolo dello stereo con codice di esempio OGL: Calculating Stereo Pairs.pdf
56