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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Transform
z
y
x v
0v
1v
2world Coordinates
• Strategia:
1) "transformazione di vista":
portare la scena davanti alla camera
• e non viceversa ;-)
1
y
x
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
Bene...
ora la geometria e' espressa in un sistema di coordianate in cui:
• lo zero è il centro di proiezione (l'obiettivo della camera)
• la camera guarda verso -z
• y è verso l'alto, e x è verso destra (rispetto alla macchina fotogr) -necessario sapere i parametri estrinseci della
"virtual camera"
- posizione - orientamento
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Transform
(Tizio) (Caio) visto da Tizio visto da Caio
• dipende dalla posiz della "camera” (macchina fotografica) – detta anche:
– pos del viewer
– eye position
– PoV (Point of View)
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
1
1 -1
-1
Transform
z
y
x v
0v
1v
2world Coordinates
1
• Strategia:
1) "transformazione di vista":
portare la scena davanti alla camera 2) "transformazione di proiezione":
proietta la geometria sul piano di proiezione
y 2
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y -x -z v
0v
1v
2v
0v
2v
1normalized projected coordinates x
- necessario sapere i parametri intrinseci della "camera virtuale"
- in particolare, la lunghezza focale
- questa trasformazione è la resposnabile della distorsione prospettica - "le cose più lontane appaiono più piccole"
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Transform
z
y
x v
0v
1v
2world Coordinates
1
1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport
y 2
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y -x -z v
0v
1v
2v
0v
2v
1v
0v
1v
2screen Space
3
normalized projected coordinates 1
1 -1
-1 x
z
y
x v
0v
1v
2 object Coordinates0
0) transformazione di modellazione
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
z Object Coordinates
• Dare ad ogni oggetto il suo sistema di coordiante privato:
il suo Object Coordinates;
y
y y
y x
x x
x
z
z
z
z
y
x
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Transform
z
y
x v
0v
1v
2world Coordinates
1
1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport
y 2
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y -x -z v
0v
1v
2v
0v
2v
1v
0v
1v
2screen Space
3
“Clip”
coordinates 1
1 -1
-1 x
z
y
x v
0v
1v
2 object Coordinates0
0) transformazione di modellazione
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Transform
x
y
z v
0v
1v
2world Coordinates
T v matrice di modellazione T m matrice di vista
T p matrice di proiezione T vp matrice di viewport
y
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y x -z v
0v
1v
2v
0v
2v
1v
0v
1v
2screen Space
T vp
“Clip”
Coordinates 1
1 -1
-1 x
x
y
z v
0v
1v
2 object CoordinatesT v
T m T p
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
“Model-View matrix”
T mv matrice di modellazione-vista
= T v *T m
T p matrice di proiezione T vp matrice di viewport
y
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y x -z v
0v
1v
2v
0v
2v
1v
0v
1v
2screen Space
T vp
“Clip”
Coordinates 1
1 -1
-1 x
x
y
z v
0v
1v
2 object CoordinatesT p
T mv
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
“Model-View-Projection matrix”
T mvp matrice di
modellazione-vista-proiezione
= T p * T v *T m T vp matrice di viewport
y x -z v
0v
1v
2v
0v
2v
1v
0v
1v
2screen Space
T vp
“CLIP”
Coordinates 1
1 -1
-1 x
x
y
z v
0v
1v
2 object CoordinatesT p T mvp
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Next: trasformazione di vista
x
y
z v
0v
1v
2world Coordinates
1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport
y
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y x -z v
0v
1v
2v
0v
2v
1v
0v
1v
2screen Space
3
“CLIP”
Coordinates 1
1 -1
-1 x
x
y
z v
0v
1v
2 object Coordinates0) transformazione di modellazione
2 0
1
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 4 / 1 5 ‧ 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 pov 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 pov
un esempio di descrizione completa dei parametri estrinseci della camera
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 4 / 1 5 ‧ 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 pov 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 e x e
-z e o e y
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 4 / 1 5 ‧ 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 pov 2) target position: p target 3) vettore di alto: v up
Esempio tipico di
costruzione transformazione di vista
y e x e
-z e o e y
z 0 x
v up
vec3 oe;
vec3 xe, ye, ze;
ze = p_target - p_pov;
ze = -ze;
ze = normlize( ze );
xe = cross( vup , ze );
xe = normalize( xe );
ye = cross(ze, xa);
y e x e z e o e
0 0 0 1
matrice che va da spazio vista a spazio mondo.
E’ l’inversa di quella che voelevo!
Ergo, va invertita!
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Esempio tipico di
costruzione transformazione di vista
vec3 oe;
vec3 xe, ye, ze;
ze = p_target - p_pov;
ze = -ze;
ze = normlize( ze );
xe = cross( vup , ze );
xe = normalize( xe );
ye = cross(ze, xa);
y e x e z e o e
0 0 0 1
matrice che va da spazio vista a spazio mondo.
E’ l’inversa di quella che voelevo!
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 4 / 1 5 ‧ 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_target, vec3 p_pov, vec3 v_up ) {
vec3 xe, ye, ze; // gli assi del sist. di rif. vista ze = p_target - p_pov;
ze = -ze;
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)
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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
Inversione di una rotazione (ripetiamoci)
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 4 / 1 5 ‧ 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 v 0 0 1 1
v 2 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)
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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 4 / 1 5 ‧ 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)
Inversione di
una roto-traslazione
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 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a