controllare le proiezioni daniele marini corso di programmazione grafica aa 2007/2008
Post on 02-May-2015
216 Views
Preview:
TRANSCRIPT
Controllare le proiezioni
Daniele Marini
Corso Di Programmazione Grafica aa 2007/2008
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 4
Sistemi di riferimento
World frame
Camera frame
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 6
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 9
Orientare il piano di proiezione
Programmazione Grafica aa2007/2008 10
Definire la viewport e la window
Programmazione Grafica aa2007/2008 11
Definire il centro di proiezione
(COP)
Programmazione Grafica aa2007/2008 12
Se la proiezione è parallela
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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)• Per la rotazione R: per trovare la
direzione y il vettore relativo v deve essere ortogonale a n: n.v=0
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
⎛
⎝
⎜ ⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟ ⎟
Programmazione Grafica aa2007/2008 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
⎛
⎝
⎜ ⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟ ⎟
Programmazione Grafica aa2007/2008 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
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 24
Proiezioni parallele oblique
Angoli del fascio di proiettori con la normale al piano di proiezione
DOP
y
x
z
normale
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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(θ,φ)
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 28
z
x
yP(x,y,z)
P(xv,yv)
Piano di proiezione
Proiezione prospettica centrale - Calcolo analitico
Centro di proiezione
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
Programmazione Grafica aa2007/2008 31
Dalle coordinate omogenee allo spazio 3D
xp =x
z/ d
yp =y
z/d
zp =z
z/ d=d
Programmazione Grafica aa2007/2008 32
Prospettiva:Angolo di visione e frustum
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 34
Prospettiva generica
• Metodo della projection normalization– Creare la matrice di normalizzazione– Deformare lo spazio– Proiettare in modo ortografico
Programmazione Grafica aa2007/2008 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
⎡
⎣
⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥
Programmazione Grafica aa2007/2008 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
⎛
⎝
⎜ ⎜ ⎜ ⎜ ⎜ ⎜ ⎜
⎞
⎠
⎟ ⎟ ⎟ ⎟ ⎟ ⎟ ⎟
Programmazione Grafica aa2007/2008 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”
Programmazione Grafica aa2007/2008 38
Programmazione Grafica aa2007/2008 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);
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 41
Profondità 3D
• Disparità binoculare• Accomodazione• Convergenza• Questi tre indizi devono essere
coerenti tra loro
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 45
Visione “sul piano schermo”
• Si ha parallasse nulla e il punto viene proiettato senza disparità sul piano immagine
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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ì!
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 50
Angolo di parallasse
= 2 atan(DX / 2d)
Programmazione Grafica aa2007/2008 51
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 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!
Programmazione Grafica aa2007/2008 54
Programmazione Grafica aa2007/2008 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
Programmazione Grafica aa2007/2008 56
top related