M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Spazio (sistema di riferimento) Vista
sistema di riferimento Vista ( View Space )
y
ex
e-z
eO
ey
x z
0
sistema di riferimento del mondo
( World Space )
Spazio Vista
• Uno spazio (sistema di riferimento) … – Comune a tutta la scena (come già lo spazio mondo)
– La camera (macchina fotografica) è nell’origine – Il piano immagine è parallelo agli assi X e Y – Il piano immagine è ortogonale all’asse Z – Specificatamente:
• La X è l’asse orizzontale dell’immagine, verso destra.
• La Y è l’asse verticale dell’immagine, verso l’alto.
• La Z va verso l’osservatore
(questo, nella convenzione OpenGL;
in DirectX: va verso la scena, si allontana dall’osserv.)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
z
y
x v
0v
1v
2 World SpaceV: transformazione di vista P: transformazione di proiezione S: transformazione di viewport
y
-z v
0v
1v
2View Space
y -x -z v
0v
1v
2v
0v
2v
1v
0v
1v
2 Screen SpaceS
“CLIP” Space
1
1 -1
-1 x
z
y
x v
0v
1v
2 Object SpaceM: transformazione di modellazione
P M
V
Trasformazione di “Vista”
• Da: World Frame A: View Frame
• Dipende interamente dai «parametri estrinseci» della macchina fotografica (virtuale)
– Cioè da dove è, e come è orientata (nel mondo) – (per es: un tipico task di Computer Vision:
«registrare una foto» = evincere i parametri estrinseci della camera al momento del suo scatto )
• E’ un cambio di sistema di riferimento, cioè una trasformazione affine…
– Matrice di Vista = la Matrice che fa questa trasformazione
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Input:
1) camera position: p eye 2) target position: p target 3) vettore di alto: v up
Esempio tipico di
costruzione transformazione di vista
y
z 0 x
sistema di riferimento globale (world frame)
v up
nb: punti e vettori espressi in spazio mondo!
p target
p eye
un esempio di descrizione esaustiva dei parametri estrinseci della camera
Input:
1) camera position: p eye 2) target position: p target 3) vettore di alto: v up
Esempio tipico di
costruzione transformazione di vista
sistema di riferimento della camera
(eye frame)
y
ex
e-z
eo
ey
z 0 x
sistema di riferimento globale (world frame)
Output:
Matrice di Trasformazione world frame → eye frame
v up
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Input:
1) camera position: p eye 2) target position: p target 3) vettore di alto: v up
y
ex
e-z
eo
ey
z 0 x
v up
vec3 oe;
vec3 xe, ye, ze;
ze = p_target - p_eye;
ze = -ze;
ze = normlize( ze );
xe = cross( vup , ze );
xe = normalize( xe );
ye = cross(ze, xa);
y
ex
ez
eo
e0 0 0 1
matrice che va da spazio vista a spazio mondo.
E’ l’inversa di quella che voelevo!
Ergo, va invertita!
Esempio tipico di
costruzione transformazione di vista
vec3 oe;
vec3 xe, ye, ze;
ze = p_target - p_eye;
ze = -ze;
ze = normlize( ze );
xe = cross( vup , ze );
xe = normalize( xe );
ye = cross(ze, xa);
y
ex
ez
eo
e0 0 0 1
matrice che va da spazio vista a spazio mondo.
E’ l’inversa di quella che volevo!
Ergo, va invertita!
Origine e assi del sistema vista espressi nelle coord del sistema mondo
Inverto z_e, per come e’
definito lo spazio vista (z verso osservatore)
“completamento di base”
nb: quando si fallisce? le due normalizz possono essere div by 0?
quando?
normalizzaz non necessaria (perché?)
Esempio tipico di
costruzione transformazione di vista
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
mat4 view_matrix( vec3 p_eye, vec3 p_target, vec3 v_up ) {
vec3 xe, ye, ze; // gli assi del sist. di rif. vista ze = p_eye - p_target;
ze = normlize( ze );
xe = cross( vup, ze );
xe = normalize( xe );
ye = cross( ze, xa );
mat4 m; // l’inversa della mat di vista
m[0] = vec4( xe, 0 ); // setta la 1ma colonna di m m[1] = vec4( ye, 0 );
m[2] = vec4( ze, 0 );
m[3] = vec4( p_pov, 1 );
return invese(m); // inversione generica? (spreco!) }
Inversione di una rotazione (ripetiamoci)
R 0
00 11
rotazione 4x4 generica
(asse passante per origine)
R = v 0 v 1 v 2
R rotazione 3x3,
cioè ortonormale a det 1, cioè v
0v
1v
2:
- unit sized
- ortogonali a due a due
-1
dove:
= R 0
00 11
T
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
R v v v v 0 0 1 1
v 2
v 2 =
proof (traccia):
* R =
T * v 0 v 1 v 2 I
R 0
00 11
rotazione 4x4 generica
(asse passante per origine)
-1
= R 0
00 11
T
Inversione di una traslazione (ripetiamoci)
I t
00 11
I
00 11
matrice 4x4 di traslazione
-1
= -t
Rototraslazione (isometria)
(tutte e sole le trasformazioni rigide)
M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
R t
00 11
= I t
00 11
R 0
00 11
*
roto-traslazione (4x4)
( o isometria ) traslazione rotazione
(asse passante per origine)