da XKCD
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
http://xkcd.com/184/
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rotazione intorno ad un asse parallelo all'asse z
x y
z x
y z
x y
traslazione T -1
rotazione R x
y
traslazione T 1
2
3
1. Porto il centro di rot nell'origine 2. Ruoto
3. Rimetto a posto
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rotazione intorno ad un asse parallelo all'asse z
x y
z x
y z
f( p ) T ( R ( T = -1 p ) )
x y
traslazione T -1
rotazione R x
y
traslazione T 1
2
3
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Composizione di trasformazioni
• Moltiplicazione matrici (vettori) ha la propretà associativa
f( p ) = T ( R ( T -1 p ) )
= (T R T -1 ) p
una matrice M 4x4 che fa tutto.
• considerazioni sull'efficienza
• cosa possiamo dire sulla forma di M ?
• cosa succede se moltiplichiamo un vettore per M ?
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Punti VS vettori
x y
z x
y
z
M
pppp M( pppp )
vvvv M( vvvv )
p p p
p = ( * , * , * , 1 ) = ( * , * , * , 1 ) = ( * , * , * , 1 ) = ( * , * , * , 1 ) punto all'angolo della casa (punto) (punto) (punto) (punto) v
v v
v = ( * , * , * , 0 ) = ( * , * , * , 0 ) = ( * , * , * , 0 ) = ( * , * , * , 0 ) velocità vettoriale del fumo (vettore) (vettore) (vettore) (vettore)
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Ripassino
• Attenzione all'inversione: (AB) -1 = B -1 A -1
• Associativa si, ma commutativa no!
AB ≠ BA
• previsione:
determinare il corretto ordine delle trasformazioni non sarà intuitivo
x y
x y
RT TR
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Cambio di frame
• tutte le transf. affini lineari si possono vedere come un cambio di frame
– comprese quelle viste:
• traslazione
• scaling (uniforme o no)
• shearing
• rotazioni
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
matrice di cambio di frame
Cambio di frame (cambio di sistema di riferimento)
• Dati due sistemi di riferimento: { v
1, v
2, v
3, p
0} { u
1, u
2, u
3, q
0}
0 3 43 2 42 1 41 0
3 33 2 32 1 31 3
3 23 2 22 1 21 2
3 13 2 12 1 11 1
p v v v q
v v v u
v v v u
v v v u
+ + +
=
+ +
=
+ +
=
+ +
=
γ γ γ
γ γ γ
γ γ γ
γ γ γ
• Esprimo uno in termini dell’altro:
p = =
coordinate di p nel primo sist. di rif.:
coordinate di p nel sec. sist. di rif.:
=
1 1 0 0 0 1
3 2 1
43 33 23 13
42 32 22 12
41 31 21 11
3 2 1
b b b
a a a
γ γ γ γ
γ γ γ γ
γ γ γ γ v 0 v 1 v 2 p 0
a
0a
1a
21
u 0 u 1 u 2 q 0 b
0b
1b
21
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
matrice di cambio di frame
Cambio di frame (cambio di sistema di riferimento) caso particlare: arrivo a sistema di riferimento canonico
• Dati due sistemi di riferimento: { v
1, v
2, v
3, p
0} { u
1, u
2, u
3, q
0}
) , , (
) , , (
) , , (
) , , (
23 22 21 0
23 22 21 3
23 22 21 2
13 12 11 1
γ γ γ
γ γ γ
γ γ γ
γ γ γ
=
=
=
=
q u u u
• Esprimo uno in termini dell’altro:
=
1 1 0 0 0 1
3 2 1
43 33 23 13
42 32 22 12
41 31 21 11
3 2 1
b b b
a a a
γ γ γ γ
γ γ γ γ
γ γ γ γ
u 1 u 2 u 3 q
p = =
coordinate di p nel primo sist. di rif.:
coordinate di p nel sec. sist. di rif.:
1 0 0
0 1 0
0 0 1
0 0 0
a
0a
1a
21
u 0 u 1 u 2 q 0 b
0b
1b
21
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 2 / 1 3 ‧ 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 v0 v1
v2
world Coordinates
1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport
y 2
-z
v0v1
v2
view Coordinates (a.k.a. eye Coordinates)
y x
-z
v0v1
v2
v0
v2
v1
v0 v1
v2
screen Space
3
Normalized Device Coordinates 1
1 -1 -1
x
x y
z v0
v1
v2
object Coordinates
0) transformazione di modellazione
0 1
Object Space
(analogo in 2D)• spazio oggetto
1
spazio oggetto (“spazio macchina”) origineoooodello
spazio oggetto
x y
2 3
-1 -2
-3
assixxxxe yyyydello spazio oggetto
1 2 3
-1 -2 -3
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Object Coordinates
(analogo in 2D)• coordinate oggetto
1.5 2.3 p = (1.5 1.5 1.5 1.5, 2.3 2.3 2.3 2.3)
spazio oggetto (“spazio macchina”)
coordinate dipppp in spazio oggetto
x y
glBegin(GL_TRIANGLES);
glVertex2d( 1.5 , 2.3 );
. . .
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Object Coordinates
(analogo in 2D)• coordinate mondo
1.5 2.3
p = (1.5, 2.3)
spazio oggetto (“spazio macchina”)
coordinate dipppp in spazio oggetto
x y
x y
spazio mondo
= (12.5, 8.1) 8.1
12.5
coordinate dipppp in spazio mondo
1 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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Object Coordinates
1.5 2.3
p = (1.5, 2.3)
spazio oggetto (“spazio macchina”)
coordinate di pppp in spazio oggetto
x y
x y
spazio mondo
= (12.5, 8.1) 8.1
12.5
coordinate di pppp in spazio mondo
1 1
11 5.8
=
1 0 . 0
1 . 8
5 . 12
1 0 . 0
3 . 2 5 . 1
1 0 0 0
0 . 0 1 0 0
8 . 5 0 1 0
11 0 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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Object Coordinates
p = (1.5, 2.3)
spazio oggetto:
(“spazio macchina AAAA”)
coordinate in spazio oggetto
x y
= (9.7, 4.2)
7.4
22.5
spazio oggetto:
(“spazio macchina BBBB”) coordinate in spazio mondo p = (1.5, 2.3)
= (22.5, 7.4)
9.7 1
1 4.2
spazio mondo
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a 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 2 / 1 3 ‧ 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 v0 v1
v2
world Coordinates
1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport
y -z
v0v1
v2
view Coordinates (a.k.a. eye Coordinates)
y x
-z
v0v1
v2
v0
v2
v1
v0 v1
v2
screen Space
3
Normalized Device Coordinates 1
1 -1 -1
x
x y
z v0
v1
v2
object Coordinates
0
0) transformazione di modellazione
1 2
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 2 / 1 3 ‧ 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
pov2) target position: p
target3) vettore di alto: v
upEsempio tipico di
costruzione transformazione di vista
yyyy
zzzz 0000 xxxx 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 2 / 1 3 ‧ 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
pov2) target position: p
target3) vettore di alto: v
upEsempio tipico di
costruzione transformazione di vista
sistema di riferimento della camera (eye frame)
yyyy
eeeexxxx
eeee----zzzz
eeeeoooo
eeeeyyyy
zzzz 0000 xxxx 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 2 / 1 3 ‧ 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
pov2) target position: p
target3) vettore di alto: v
upEsempio tipico di
costruzione transformazione di vista
yyyy
eeeexxxx
eeee----zzzz
eeeeoooo
eeeeyyyy
zzzz 0000 xxxx
v up
Point3 o_e;
Vec3 x_e, y_e, z_e;
z_e = p_target - p_pov;
z_e = -z_e;
z_e = z_e / |z_e| ;
x_e = v_up X z_e ; x_e = x_e / |x_e| ; y_e = z_e X x_e;
yyyy
eeeexxxx
eeeezzzz
eeeeoooo
eeee0 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 2 / 1 3 ‧ 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
Point3 o_e;
Vec3 x_e, y_e, z_e;
z_e = p_target - p_pov;
z_e = -z_e;
z_e = z_e / |z_e| ;
x_e = v_up X z_e ; x_e = x_e / |x_e| ; y_e = z_e X x_e;
yyyy
eeeexxxx
eeeezzzz
eeeeoooo
eeee0 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 divisioni possono essere per 0?
quando?
normalizzaz non necessaria (perchè?)
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 2 / 1 3 ‧ 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:
- normali
- 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 2 / 1 3 ‧ 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 2 / 1 3 ‧ 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 2 / 1 3 ‧ 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
*
rototraslazione (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 2 / 1 3 ‧ 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
*
-1 ( -1 =
= = … =
nb: (A B)
-1= B
-1A
-1R 0
00 11 )
I -t
00 11
R 0
00 11
* R
00 11 T
R T * -t
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 2 / 1 3 ‧ 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 v0 v1
v2
world Coordinates
T
vmatrice di modellazione T
mmatrice di vista T
pmatrice di proiezione T
vpmatrice di viewport
y -z
v0v1
v2
view Coordinates (a.k.a. eye Coordinates)
y x
-z
v0v1
v2
v0
v2
v1
v0 v1
v2
screen Space
T vp
Normalized Device Coordinates 1
1 -1 -1
x
x y
z v0
v1
v2
object Coordinates
T 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 2 / 1 3 ‧ 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
mvmatrice di modellazione-vista
= T
v*T
mT
pmatrice di proiezione T
vpmatrice di viewport
y -z
v0v1
v2
view Coordinates (a.k.a. eye Coordinates)
y x -z
v0v1
v2
v0
v2
v1
v0 v1
v2
screen Space
T vp
Normalized Device Coordinates 1
1 -1 -1
x
x y
z v0
v1
v2
object Coordinates
T 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 2 / 1 3 ‧ 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
mvpmatrice di
modellazione-vista-proiezione
= T
p* T
v*T
mT
vpmatrice di viewport
y x
-z
v0v1
v2
v0
v2
v1
v0 v1
v2
screen Space
T vp
Normalized Device Coordinates 1
1 -1 -1
x
x y
z v0
v1
v2
object Coordinates
T 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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Scene composite (gerarchicamente)
sist coord macchina
sist coord ruota
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rendering di scene composite
spazio
mondo
(globale)
spazio oggetto
ruota 1
spazio oggetto
automobile
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Scene graph
V
M
0M
1M
2M
3M
4M
5M
6posizonamento della automobile (rispetto al mondo) posiz. della
ruota (rispetto
all’
automobile)
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Scene graph
V
M
0M
1M
2M
3M
4M
5M
6 spazio mondo spaziovista
spazio auto 1
spazio
auto 2 spazio
auto 3
spazio ruota A spazio
ruota B spazio ruotaC spazio
ruotaD
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Stack di matrici di model-view!
I * V M
I * V * M 0 I V M 0 M 4
Stack di matrici di model-view!
• Matrice in testa allo stack = model-view corrente
• Operazioni che servono:
1. sovrascrivere identità nella matrice in testa
• x inizializzazione!
2. moltiplicare matrice-in-testa per 1 matrice data
• nb: si moltiplica a destra: M
[top]= M
[top]* M
new• dunque: “ultima cosa che faccio, 1ma cosa che avviene”
3. push
• (replicare matrice in testa in nuovo livello)
• x quando scendo di un livello!
• (“salva” la matrice corrente) 4. pop
• (scartare la matrice in testa)
• x quando salgo di livello!
• “recupera la matrice corrente
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Scene graph
V
M
0M
1M
2M
3M
4M
5M
6setIdentity mult(V) push
mult(M0)
drawMacchina(Red);
push mult(M3) drawRouta pop push
mult(M4) drawRuota pop
… pop push
mult(M1)
drawMacchina(Green);
… pop mult(Traslaz…)
mult(Rotaz…) mult(Scale…) oppure molte, per es
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Model view:
spesso ottenuta come composizione di transf
• Procedura disegna_pupazzo_di_neve – Disegna cerchio unitario // corpo – Trasla di (0,2)
– Disegna cerchio unitario // testa – (undo trasla)
– END
3
1 2 3
1
2
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Model view:
spesso ottenuta come composizione di transf
• Procedura disegna_pupazzo_di_neve – Disegna cerchio unitario // corpo – Trasla di (0,2)
– Disegna cerchio unitario // testa – (undo trasla)
– END
• Main – Scala di (2,2)
– disegna_pupazzo_di_neve:
• Disegna cerchio unitario
• Trasla di (0,2)
• Disegna cerchio unitario
• (undo trasla)
3
1 2 3 1 2 4 5 6
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Un trucco
M
0M
1M
2M
3M
4M
5M
6M
9photocamera montata sull’automobile
posizonamento della camera (rispetto all’automobile) spazio
mondo
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Un trucco
V
M
0M
1M
2M
3M
4M
5M
6M
9photocamera montata sull’automobile
posizonamento della camera (rispetto all’automobile) spazio
mondo spazio
vista
= ( M
2M
9)
-1= M
9-1M
2-1Un trucco: morale
la trasformaz di modellazione modellazione modellazione modellazione necessaria per piazzare un oggetto oggetto oggetto oggetto in una certa pos
è l’inversa
della trasformaz di vista vista vista vista necessaria per piazzare la camera camera camera camera in quella pos
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Un altro modo ancora per definire la matrice di vista una semplice “Trackball”:
una semplice “Trackball”:
una semplice “Trackball”:
una semplice “Trackball”:
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
phi theta
z -x
y
Un semplice esempio di trackball
• Interfaccia base per selezionare un punto di vista
• Due angoli (phi e theta) + distanza (ro) – (es mappati su assi X Y mouse + mousewheel)
• Utile per visualizzare un piccolo oggetto – permettere alla camera di ruotargli intorno
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
setIdentity
mult( translation(0,0,-ro) )
mult( rotationX (-theta) )
mult( rotationY (-phi) )
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Next: trasformazione di proiezione
x y
z v0 v1
v2
world Coordinates
1
1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport
y -z
v0v1
v2
view Coordinates (a.k.a. eye Coordinates)
y x -z
v0v1
v2
v0
v2
v1
v0 v1
v2
screen Space
3
Normalized Device Coordinates 1
1 -1 -1
x
x y
z v0
v1
v2
object Coordinates
0
0) transformazione di modellazione
2
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di proiezione
• Prima o poi dovremo farlo: da 3D a 2D !
y 2
-z
v0v1
v2
view Coordinates (a.k.a. eye Coordinates)
y x -z
v0v1
v2
v0
v2
v1
normalized projected coordinates 1
1 -1 -1
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di proiezione
• Vecchio problema:
– (in arte, architettura progettazione)
• come riportare
– su un piano (immagine 2D) – oggetti 3D
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di proiezione
• Modo 1:
– facile: togliamo una coordinata – cioe’ azzeriamo la z
– matrice corrisponente:
=
0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 1 P Z
Inversa?
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di proiezione
• E' una proiezione ortogonale
– non c'è prospettiva – simula:
• il punto di vista all'infinito
• con un binocolo mooolto potente – direzioni di vista costanti su tutta
la scena
– Più una scalatura non uniforme
• causa aspect ratio aaaa del ViewPort (e.g. monitor / della finestra!)
• Compensa la scalatura non uniforme della trasformaz di ViewPort
=
0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 1 P Z a
a ViewPort_Width
= --- ViewPort_Height
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trovare le differenze...
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trovare le differenze...
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Come si svolge fisicamente il processo:
• Occhio o macchina fotografica il concetto è lo stesso:
lenti
CCD o pellicola
(2D screen buffer)
lenti retina
(2D screen buffer)
distanza
focale distanza
focale
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Nostro modello semplificato:
• pin-hole camera
distanza focale
-x y
-z
imageplane
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Nostro modello semplificato:
nota: nnnniente lenti iente lenti iente lenti iente lenti
– le lenti servivano a "simulare" una pin-hole camera – non modellandole,
ci siamo giocati (per ora) i "difetti" di questa simulazione:
• range di fuoco finito
• flares
• distorsioni radiali
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Matematicamente
y
-z
distanza focale d
image plane
centro di proiezione (origine)
x
) , , ( x y z
) , , ( x
py
pz
p
=
z y x k z y x
p p p
Nota:
non è lineare né affine;
non è reversibile.
non mantiene: rapporto fra distanze colineari (ma mantiene: colinearità)
con k t.c. z
p= − d
z d k = − /
quindi…
−
−
−
=
d z dy
z dx
z y x
p p p
/ / e
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Estendiamo la notazione
• Esprimo i punti anche con la notazione
0
con ≠
= w
w wz wy wx p
w wz wy wx
1 z y x divisione per
4ta comp
anche detta normalizzazione affine
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Estendiamo la notazione
• Per es:
10 30 10 20
1 3 1 2
1 . 0
3 . 0
1 . 0
2 . 0
2 6 2
4 sono le
coordinate coordinate coordinate coordinate omogene omogene omogene omogene
del punto punto punto punto che ha le seguenti coordinate coordinate coordinate
coordinate cartesiane cartesiane cartesiane cartesiane
3 1 2
0 3 1
2 sono le
coordinate coordinate coordinate coordinate omogene omogene omogene omogene del vettore vettore vettore vettoreche ha le
seguenti coordinate coordinate coordinate
coordinate cartesiane cartesiane cartesiane cartesiane
3 1 2
…
punto punto punto punto
vettore vettore vettore vettore queste
sono in
“forma normale”
( w = 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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Coordinate omogenee
• Il punto P di coordinate cartesiane (x,y,z) è rappresentato in coordinate omogenee come (xw,yw,zw , w), con w qualunque (ma non 0)
• Due punti di coordinate (x, y, z, w) e (x′, y′, z′, w′) possono rappresentano lo stesso punto dello spazio;
– [quando?]
• Quando w = 1 (forma canonica ) le coord cartesiane coincidono con le prime tre coord omogenee.
• Con (x, y, z, w ≠ 0) si rappresentano punti , con (x, y, z, 0) si rappresentano vettori.
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Proiezione prospettica
−
=
0 / 1 0 0
0 1 0 0
0 0 1 0
0 0 0 1
d P
=
d z
z y x
z y x
/ 1 P
1 / /
d d z
y d z
x divisione per
4ta comp
matrice di trasformazione per la proiezione prospettica:
In realtà.
la 3 e 4 si lasciano invariate…
i valori (originali) ci saranno utili !
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
In realtà non si scarta la terza dimensione:
ci servirà
y P
-z
v0v1
v2
view Coordinates (a.k.a. eye Coordinates)
x
normalizzazione affiney
z
x
coordinate proiettate e normalizzate (affine) [ancora 3D!]
Moltiplicazione per la matrice di
proiezione
La parte visibile casca in [[[[----1,1] x [ 1,1] x [ 1,1] x [ 1,1] x [----1,1] x [ 1,1] x [ 1,1] x [ 1,1] x [----1,1] 1,1] 1,1] 1,1]
quindi dette anche
"Normalized Device Coordinates"
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Proiezione Prospettica: che effetto fa
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Proiezione Prospettica: che effetto fa
d infinito
(diventa una proiezione ortogonale)d piccolo d grande
=
0 / 1 0 0
0 1 0 0
0 0 1 0
0 0 0 1
d P Più distorsione
prospettica.
Effetto "fish-eye"
(grandangolo)
Proporzioni più mantenute Effetto "zoom"
(eg. vista dal
satellite)
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 2 / 1 3 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a