Computer Graphics
Marco Tarini Università dell’Insubria
Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2011/12
Lezione 5:
Lezione 5:
Lezione 5:
Lezione 5: la T in T la T in T&L la T in T la T in T &L &L &L
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
fra m m en ti
(candidati pixels)Riassunto puntate precedenti 3/3
Ve rti ci
(punti in R3)pixel
finali
(nello screen-buffer)
Ve rti ci pr oi et ta ti
(punti in R2) Zrasterizer triangoli
co m pu ta zi on i pe r f ra m m en to
z y
x v0 v1
v2
set- up
v0 v1
v2
rasterizer segmenti set- up
rasterizer punti set- up
co m pu ta zi on i pe r v er tic e
noi siamo qui
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 1 / 1 2 ‧ 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 v0 v1
v2
v0 v1
v2
world Coordinates screen Coordinates
• Per ogni vertice:
?
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 1 / 1 2 ‧ 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
q = (p) v = (u) Trasformazioni geometriche (in generale)
• Funzioni che – prendono
un punto / un vettore – lo mappano in un altro
punto / vettore
Ora, un ripassino di geometria...
p
f f f
f
q
f
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 1 / 1 2 ‧ 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 v0 v1
v2
world Coordinates
• Strategia:
1) "transformazione di vista":
portare la scena davanti alla camera
• e non viceversa ;-)
1
y
x
-z
v0v1
v2
view 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 e verso destra (rispetto al fotografo)
-necessario sapere i parametri estrinseci della
"camera virtuale"
- 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
• :"trasformazione di vista":
portare la scena davanti alla camera
1) Trasformazione di vista
sistema di riferimento della camera (eye coords)
yyyy
eeeexxxx
eeee----zzzz
e e e eO O O O
e e e eyyyy
xxxx zzzz
0000 sistema di riferimento del mondo
(world coords) è un cambio di sistema di riferimento
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
1) Trasformazione di vista
• La posso ottenere con una serie di – traslazioni
– rotazioni
• La posso vedere come
un cambio di sistema di riferimento
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 1 / 1 2 ‧ 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 v0 v1
v2
world 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
v0v1
v2
view Coordinates (a.k.a. eye Coordinates)
y -x -z
v0v1
v2
v0
v2
v1
normalized 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 1 / 1 2 ‧ 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 v0 v1
v2
world Coordinates
1
• Strategia:
1) "transformazione di vista":
portare la scena davanti alla camera 2) "transformazione di proiezione":
proietta la geometria sul piano di proiezione 3) " transformazione di viewport":
da [-1,+1]
2a [0..res
x]x[0..res
y] (pixels)
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 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 1 / 1 2 ‧ 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 Object Coordinates Object Coordinates 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Object Coordinates
• Dare ad ogni oggetto il suo sistema di coordiante privato:
il suo Object Coordinates Object Coordinates Object Coordinates Object Coordinates;
• Durante il transform, prima di tutto
portare ogni oggetto nello sist di coordinate comuni:
da Object Coordinates Object Coordinates Object Coordinates Object Coordinates a World Coordiantes World Coordiantes World Coordiantes World Coordiantes
– consente di riutilizzare lo stesso modello più volte nella stessa scena – ogni volta, stesse object coordinates,
ma una trasformazione ("di modellazione") diversa per arrivare a World Coordinates diverse
– Es: ruote di una macchina (4 volte l'istanza di una ruota)
alberi, case, sedie in una stanza, pedoni su una scacchiera...
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 1 / 1 2 ‧ 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 v0 v1
v2
world Coordinates
1
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 projected coordinates 1
1 -1 -1
x
z y
x v0
v1
v2
object Coordinates
0
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
q = (p) v = (u) Trasformazioni geometriche (in generale)
• Funzioni che – prendono
un punto / un vettore – lo mappano in un altro
punto / vettore
Ora, un ripassino di geometria...
p
f f f
f
q
f
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Spazio vettoriale
• Due entità:
– scalari – vettori
• Operazioni
– somma e prodotto tra scalari (ovviamente)
– somma fra vettori
– prodotto vettore x scalare → vettore
(commutativo)
(lo spazio vettoriale e' chiuso rispetto a:
somma vettoriale e al prodotto con scalari)
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Operazioni aggiuntive fra vettori in R 3
• Prodotto scalare (fra vettori)
– aka prodotto dot ( dot-product , o inner-product ) – vettore xxxx vettore → scalare
• Prodotto vettoriale (fra vettori)
– aka prodotto cross ( cross-product, X-product ) – aka prodotto esterno
– vettore xxxx vettore → vettore
• Norma
– vettore → scalare
• Normalizzazione – 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Ripasso: prodotto scalare e vettoriale
• Prodotto Scalare ("dot-product", "inner product") : vettore x vettore → scalare
) ( ) ( ) (
) (
v u v u v u
w v w u w v u
u v v u
⋅
=
⋅
=
⋅
⋅ +
⋅
=
⋅ +
⋅
=
⋅
α α α
commuta lineare 1/2 lineare 2/2 Proprietà
z z y y x x z y x 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Ripasso: prodotto scalare e vettoriale
• Prodotto Scalare ("dot-product", "inner product") : vettore x vettore → scalare
( ) ( )
) 0 , 0 , 0 (
0 ⇔ =
=
⋅
−
⋅
−
=
−
⋅
=
v v v
Q P Q P Q P
v v v
e anche:
quindi, per calcolare una distanza tra punti:
per il modulo:
Proprietà
z z y y x x z y x 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Ripasso: prodotto scalare e vettoriale
• Prodotto Scalare ("dot-product", "inner product") : vettore x vettore → scalare
z z y y x x z y x z y
x α α β β β α β α β α β
α , , ) ⋅ ( , , ) = + + (
θ θ
cos 0
cos
=
⋅
⇔
=
⋅
=
⋅
v u
v u v u
v u v u
e ortogonali
Proprietà
e, se u e v sono normalizzati:
quindi se u e v non sono nulli:
molto utilmente:
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Ripasso: prodotto scalare e vettoriale
• Prodotto Vettoriale ("cross-product", "external product") : vettore x vettore → vettore
0 ) ( ) (
) (
=
⋅
×
=
⋅
×
×
−
=
×
u v u v v u
u v v u Proprietà
il risultato è ortogonale ad entrambi gli operandi:
non commuta:
−
−
−
=
×
x y y x
z x x z
y z z y z y x z y x
β α β α
β α β α
β α β α β β β α α
α , , ) ( , , )
(
u v u x v
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Ripasso: prodotto scalare e vettoriale
• Prodotto Vettoriale ("cross-product", "external product") : vettore x vettore → vettore
Proprietà
−
−
−
=
×
x y y x
z x x z
y z z y z y x z y x
β α β α
β α β α
β α β α β β β α α
α , , ) ( , , )
(
θ θ
sen 0
sen
=
×
⇔
=
×
=
×
v u
v u v u
v u v u
e allineati e, se u e v
sono normalizzati:
quindi se u e v non sono nulli:
molto utilmente:
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Spazio affine
• Tre entità – scalari – vettori – punti
attributi:
lunghezza, direzione unico attributo:
la posizione, rispetto ad un sistema di riferimento
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Spazio affine
• Tre entità – scalari – vettori – punti
• Operazioni:
– Eredita dallo (è uno) spazio vettoriale:
• Somma e prodotto tra scalari
• Moltiplicazione (scalare ,,,, vettore )→ vettore
• Somma (vettore ,,,, vettore) → vettore – Somma (punto ,,,, vettore ) → punto – Sottrazione (punto ,,,, punto) → 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Sistema di riferimento ( frame )
• Definito da
– un punto base (origine) p
0– e una base vettoriale { v
0, v
1, v
2}
• Posso esprimere (univocamente) ogni punto punto punto punto p come:
p = v 0 η 0 + v 1 η 1 + v 2 η 2 + p 0
coordinate omogenee di p lin indip
• cioè: p = v 0 v 1 v 2 p 0
η 0
η 1
η 2
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Sistema di riferimento ( frame )
• Definito da
– un punto base (origine) p
0– e una base vettoriale { v
0, v
1, v
2}
• Posso esprimere (univocamente) ogni vettore vettore vettore vettore v come:
v = v 0 η 0 + v 1 η 1 + v 2 η 2 + p 0
coordinate omogenee di p
• cioè: v = v 0 v 1 v 2 p 0 η 0 η 1 η 2 0
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Sistema di riferimento ( frame )
• Un frame può essere:
– ortogonale
(se i vettori della base lo sono fra loro) – ortonormale
(se i vettori della base sono ortogonali e normali)
• Frame canonico:
– matrice identità
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Frame sinistrorso e detrorso
• Un sistema di riferimento ortogonale può essere immaginato sinistrorso o destrorso
sinistrorso destrorso
z y x × =
• Ricordiamoci di usare la STESSA MANO per il prodotto cross
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rappresentazione di punti e vettori in coordinate omogenee
= 1
3 2 1
α α α p
= 0
3 2 1
δ δ δ a
Punti Vettori
1 0
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
q = (p) v = (u) Trasformazioni
• Funzioni che prendono un punto (o un vettore)
e lo mappano in un altro punto (o vettore)
– lavorano in coord omogenee – ci interessano
trasformazioni che siano lineari:
p
f f f
f
q
f
) ( ) ( )
( v
0v
1f v
0f v
1f α + β = α + β (coi vettori)
) ( ) ( )
( p v f p f v
f + α = + α (coi punti)
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazioni Affini
• Sono lineari e dunque preservano:
– la colinearità
• tutti i punti
inizialmente su una linea giacciono ancora su di una linea dopo la trasformazione
e anche – i rapporti tra le distanze
• il punto di mezzo di un segmento rimane il punto di mezzo di un segmento anche dopo la trasformazione.
in generale non in generale non in generale non in generale non preservano:
preservano: preservano:
preservano:
distanze, angoli, aree se lo fanno, le
chiamiamo
“trasf. Rigide”
“isometrie” o
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazioni Affini
• Si possono esprimere come moltiplicazione con matrice
sempre
=
1 1 0 0 0 1
3 2 1
34 33 32 31
24 23 22 21
14 13 12 11
3 2 1
γ γ γ
α α α α
α α α α
α α α α
γ γ γ f
coordinate omogenee punto di partenza
= 1
3 2 1
δ δ δ
coordinate omogenee punto di arrivo
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
conta solo questo
Trasformazioni Affini
• Caso vettori
sempre
=
1 1 0 0 0 1
3 2 1
34 33 32 31
24 23 22 21
14 13 12 11
3 2 1
γ γ γ
α α α α
α α α α
α α α α
γ γ γ f
coordinate omogenee vettore di partenza
= 1
3 2 1
δ δ δ
coordinate omogenee vettore di arrivo 0000 0000 ... ... ... ... 0000
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Esempio: trasformazione di traslazione rigida
+
=
′
′
′
0 1 1
z y x
z y x
z y x
α α α
=
1 1 0 0 0
1 0 0
0 1 0
0 0 1
1
z y x
z y x f
z y x
α α α posso riscriverla come:
e cioè:
+ + +
=
1 1
z y x
z y x
z y x
f α
α α
vettore di 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di Traslazione rigida
l'inversa è ovviamente:
=
1 0 0 0
1 0 0
0 1 0
0 0 1 ) , , (
z y x
z y
x
α
α α α
α α T
−
−
−
=
−
−
−
−
=
1 0 0 0
1 0 0
0 1 0
0 0 1 ) , , ( ) , ,
1
(
z y x
z y x z y
x
α
α α α
α α α α
α T
T
matrice di 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di Traslazione rigida
cosa succede se la applico ad un vettore ?
=
1 1 0 0 0
1 0 0
0 1 0
0 0 1
0
z y x
z y x f
z y x
α α α
0000 0000
= 0 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
(γ ) S
matrice di scaling matrice di scaling matrice di scaling matrice di scaling
Trasformazione di Scalatura uniforme
x y x
y
=
1 1
z y x
z y x
f γ
γ γ
=
1 1 0 0 0
0 0 0
0 0 0
0 0 0
1
z y x
z y x
f γ
γ
γ
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di Scalatura generica
x y x
y
=
1 1
z y x
z y x f
z y x
γ γ γ
) , , ( γ
xγ
yγ
zS
matrice di scaling matrice di scaling matrice di scaling matrice di scaling
=
1 1 0 0 0
0 0 0
0 0 0
0 0 0
1
z y x
z y x f
z y x
γ γ γ
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di Scalatura generica
x y
x y
nota: la scalatura applicata ai punti
"scala" anche la distanza dall'origine
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di Scalatura generica
• Osservazioni :
– Fattori di scala inferiori a 1 avvicinano l’oggetto al punto fisso di riferimento (origine)
– Fattori di scala maggiori di 1 lo allontanano – Se s x ≠ s y o s y ≠ s z le proporzioni dell’oggetto non
sono mantenute (scalatura non uniforme, o anisotropica )
– Se s x = s y = s z le proporzioni sono mantenute e si ha una scalatura uniforme (o isotropica )
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Shearing
• Lo spostamento proporzionale alla pos y
=
=
′
′ = +
=
′
1 0 0 0
0 1 0 0
0 0 1 0
0 0 cot 1 ) (
cot
θ θ
θ
H
xyz z
y y
y x 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rotazione attorno all'asse z
(x’,y’)
(x,y)
x y
z
φ ρ
φ ρ
sin cos
=
= y x
partenza:
) sin(
) cos(
θ φ ρ
θ φ ρ
+
=
′
+
′ = y
arrivo: x
ρ φ
θ
θ θ
θ θ
cos sin
sin cos
y x
y x
+
=
−
= θ φ ρ θ φ ρ
θ φ ρ θ φ ρ
cos sin sin cos
sin sin cos cos
+
=
−
=
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rotazione attorno all'asse z
(x’,y’)
(x,y)
x y
z
ρ φ
θ θ
θ θ θ
cos sin '
sin cos
y x y
y x x
+
=
−
=
′
=
1 0 0 0
0 1 0 0
0 0 cos sin
0 0 sin - cos )
( θ θ
θ θ
Z
θ R
= +
=
′
′
′
1 cos sin
sin - cos
1 ) ( 1
z y x
y x
z y x z R
y x
Z
θ θ
θ
θ
θ
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rotazione attorno all'asse x, y, o z
=
1 0 0 0
0 1 0 0
0 0 cos sin
0 0 sin - cos )
( θ θ
θ θ
Z
θ R
=
1 0 0 0
0 cos sin 0
0 sin - cos 0
0 0 0 1 )
( θ θ
θ θ θ
R
X
=
1 0 0 0
0 cos 0 sin -
0 0 1 0
0 sin 0 cos )
( θ θ
θ θ
Y
θ R
e le inverse?
T
1
( ) ( )
)
( θ
Xθ
Xθ
X
R R
R
−= − =
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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Rotazioni generiche
• Una rotazione generica è definita da:
– angolo u , – asse v
– punto di applicazione p f
• come si fa?
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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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
2
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) 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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
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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 posizonamento della automobile (rispetto al mondo) posiz. dellaruota (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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ 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 1 / 1 2 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a