da XKCD
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Cambio di frame
• In realtà tutte le transf. affini lineari si possono vedere come un cambio di frame
– comprese quelle viste:
• traslazione
• scaling (uniforme o no)
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
• scaling (uniforme o no)
• shearing
• rotazioni
Rotazioni generiche
• Una rotazione generica é definita da:
– angolo, – asse
– punto di applicazione
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
• come si fa?
• Input:
1) camera position C pos 2) direzione di vista C dir 3) vettore di alto C up
Esercizio: transformazione di vista
yyyy eeee xxxx
• Output:
Matrice di Trasformazione
world frame → eye frame
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
sistema di riferimento della camera (eye frame)
xxxx eeee
----zzzz e e e e O O O O e e e e yyyy
zzzz 0000 xxxx
sistema di riferimento globale (wolrd frame)
C up
Transform
1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport
v
0v
1v
2x y
z v
0v
1v
2object Coordinates
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
x y
z
v
0v
1v
2 world Coordinatesy 2
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y x -z v
0v
1v
2v
0v
2v
1v
2screen Space
3
Normalized Device Coordinates 1
1 -1 -1
x
object Coordinates
0 1
Esempio in 2D
• Procedura Disegna_pupazzo_di_neve – Disegna cerchio unitario // corpo – Trasla di (0,2)
– Disegna cerchio unitario // testa – (undo trasla)
– END
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
3
1 2 3 1
2
Esempio in 2D
• Procedura Disegna_pupazzo_di_neve – Disegna cerchio unitario // corpo – Trasla di (0,2)
– Disegna cerchio unitario // testa – (undo trasla)
– END
3 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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
• 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
Scene composite
sist coord macchina
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
sist coord ruota
Rendering di scene composite
M matrice di modelling usata
(da settare prima del rendering di ogni pezzo)
T
Mmatr traslazione macchina R
Mmatr rotazione macchina
T
MR
M: va da frame macchina a frame 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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
T
MR
M: va da frame macchina a frame mondo
T
Rimatr traslazione ruota i T
Ri: va da frame ruota
a frame macchina! sist coord
mondo (globale) T
MCome viene l'algoritmo di rendering?
Stack di matrici di modelling!
T R 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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
T M R M M
T M R M T R0
Transform
1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport
v
0v
1v
2x y
z v
0v
1v
2object Coordinates
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
x y
z
v
0v
1v
2 world Coordinates1
y -z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y x -z v
0v
1v
2v
0v
2v
1v
2screen Space
3
Normalized Device Coordinates 1
1 -1 -1
x
object Coordinates
0
2
Trasformazione di proiezione
• Prima o poi dovremo farlo: da 3D a 2D !
y 2
-z v
1v
2y x v
1v
2v
0v
11 -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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
2
-z v
0view Coordinates (a.k.a. eye Coordinates)
-z v
0v
2v
2v
1normalized projected coordinates 1 -1
x
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
– oggetti 3D
Trasformazione di proiezione
• Modo 1:
– facile: togliamo una coordinata – cioe’ azzeriamo la z
– matrice corrisponente:
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
=
0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 1
P Z
Inversa?
Trasformazione di proiezione
• E' una proiezione ortogonale
– non c'è prospettiva
– simula una situazione in cui:
• il punto di vista all'infinito
• con un binocolo mooolto potente
=
0 0 0 0
0 0 0 0
0 0 1 0
0 0 0 1
P 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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
• con un binocolo mooolto potente – direzioni di vista costanti
– Ci manca una scalatura non uniforme
• (causa aspect ratio del monitor / della finestra!)
0 0 0 0
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 0 / 1 1 ‧ 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:
CCD o pellicola
(2D screen buffer)
retina
(2D screen buffer)
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
lenti
lenti
buffer)
distanza
focale distanza
focale
Nostro modello semplificato:
• pin-hole camera
y
image
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
distanza focale
-x -z
image
plane
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:
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
i "difetti" di questa simulazione:
• range di fuoco finito
• flares
• distorsioni radiali
Matematicamente
y
-z image plane
x x y
d x z
x
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
-z
distanza focale d centro di proiezione (origine)
x
) , , ( x y z
) , , ( x
py
pz
pd d z z y y d z
x
p= x
p=
p= / /
Nota:
non è lineare né affine;
non è reversibile.
non mantiene: rapporto fra distanze colineari (ma mantiene: colinearità)
Ritocchiamo la notazione
• Esprimo i punti anche con la notazione
0
con ≠
= w
w wz wy wx 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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
w
w wz wy wx
1 z y x divisione per
4ta comp
anche detta normalizzazione affine
Proiezione prospettica
=
0 / 1 0 0
0 1 0 0
0 0 1 0
0 0 0 1
d P
matrice di trasformazione per la proiezione prospettica:
questa operazione si fa per ultima.
La 3 e 4 componente
(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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
=
d z
z y x
z y x
/ 1 P
1 / /
d d z
y d z
x
divisione per 4ta comp
In realtà non si scarta la terza dimensione:
ci servirà
y P
-z v
1v
2normalizzazione affine
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
P
-z v
0view Coordinates (a.k.a. eye Coordinates)
x
normalizzazione affine
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"
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 0 / 1 1 ‧ 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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
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)
Curiosità
• effetto Vertigo – detto anche
“contra-zoom” o “track & zoom” “dolly-zoom”
– aumetare (diminuire) al contempo
• la distanza del POV
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
• la distanza del POV
• la lunghezza focale di campo
– in modo da lasciare inalterati gli oggetti ad una certa profondità d (e dintorni)
– trucco classico in cinematografia (a partire da Hitchcock)
– come trasformazione di matrice?
Considerazione
traslazione rotazione
lu ng he zz e
(isometrie)ra pp or ti lu ng he zz e su u na li ne a
an go li
(transf. conformali)co lin ea ril tà
VVVV VVVV VVVV
VVVV VVVV
VVVV VVVV
VVVV
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
rotazione
scalatura uniforme scalatura non uniforme shearing
proiezione ortigonale trasf. affine generica proiezione prospettica (+ rinormalizzazione)
VVVV XXXX XXXX XXXX XXXX XXXX XXXX
VVVV VVVV XXXX XXXX XXXX XXXX XXXX
VVVV VVVV VVVV VVVV VVVV VVVV XXXX
VVVV VVVV VVVV VVVV VVVV VVVV VVVV
Considerazione
v
0v
1v
2x y
z v
0v
1v
2object Coordinates
Modellazione + Vista:
di solito
- scalature uniformi - traslazioni - rotazioni
che mantengono gli angoli Proiezione:
teniamo una sola matrice per entrambe
(la matrice
"Modellazione-Vista") teniamo questa matrice separata (la matrice
"Proiezione")
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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
x y
z
v
0v
1v
2world Coordinates
y
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y x -z v
0v
1v
2v
0v
2v
1v
2screen Space
Normalized Device Coordinates 1
1 -1 -1
x
object Coordinates
modellazione
vi st a pr oi ez io ne
viewport Proiezione:
non mantiene gli angoli
Stack di matrici di MODEL-VIEW
V T M R M T R0 teniamo una sola
matrice per entrambe (la matrice
"Modellazione-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 0 / 1 1 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a