Computer Graphics
Lezione 4:
la T in T&L bis
Università dell’Insubria
Facoltà di Scienze MFN di Varese
Corso di Laurea in Informatica
Anno Accademico 2005/06
Marco Tarini
setup
rasterizer
triangoli
setup
rasterizer
segmenti
computazioni
per frammento
rasterizer
punti
(candidati pixels)
Z
setup
frammenti
(punti in R2)
Vertici
proiettati
Vertici
(punti in R3)
computazioni
per vertice
Riassunto puntate precedenti
(nello
screen-buffer)
noi siamo qui
y
v1
v0
x
v2
v1
v0
z
C o m p u t e r
pixel
finali
v2
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 2/40
Riassunto puntate precedenti 2/3
• Per ogni vertice: TRANSFORM
y
v1
v0
x
v2
?
z
object Coordinates
C o m p u t e r
v1
v0
v2
screen Coordinates
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 3/40
Riassunto puntate precedenti 3/3
y
v0
0) transformazione di modellazione
1) transformazione di vista
2) transformazione di proiezione
3) transformazione di viewport
v1
z
v2
x
object Coordinates
v1
v0
v2
screen Space
0
3
y
v1
v0
z
y
v2
x
1
world Coordinates
C o m p u t e r
v1
-z
x
v0
1
v2
2
v0
1
v2
-1
v1
y
v1
x
-z
v2
v0
-1
view Coordinates
Normalized Device
G r a p (a.k.a.
h i c seye
‧ Coordinates)
2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u bCoordinates
r i a - 4/40
1) Transformazione di vista
• La posso fare con una serie di
– traslazioni
– rotazioni
• ripassino di geometria...
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 5/40
Spazio affine
• Spazio dove ci sono tre entità
– scalari
– vettori
– punti
attributi:
lunghezza, direzione
unico attributo:
la posizione,
rispetto ad un
sistema di riferimento
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 6/40
Spazio affine
• Spazio dove ci sono tre entità
– scalari
– vettori
– punti
• Operazioni:
–
–
–
–
–
Somma e moltiplicazione tra scalari (ovviamente)
Moltiplicazione scalare x vettore → vettore
Somma vettore x vettore → vettore
Somma punto x vettore → punto
Sottrazione punto x punto → vettore
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 7/40
Sistema di riferimento ( frame )
• Definito da
– un punto base (origine) p0
– e una base vettoriale { v0 , v1 , v2 }
lin indip
• Posso esprimere (univocamente) ogni punto p come:
p = v0  0 + v1 1 + v2 2 + p0
• cioè:
p = [ 0 , 1 , 2 , 1]
coordinate omogenee di p
C o m p u t e r
v0
v1
v2
p0
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 8/40
Sistema di riferimento ( frame )
• Definito da
– un punto base (origine) p0
– e una base vettoriale { v0 , v1 , v2 }
• Posso esprimere (univocamente) ogni vettore v come:
v = v0  0 + v1 1 + v2 2 + p0
• cioè:
v = [ 0 , 1 , 2 , 0]
coordinate omogenee di v
C o m p u t e r
v0
v1
v2
p0
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 9/40
Rappresentazione di punti e vettori
in coordinate omogenee
Vettori
Punti
1
C o m p u t e r
1 
 
p   2
 3 
 
1
0
 1 
 
a   2
 3 
 
0
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 10/40
Trasformazioni Affini
• 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
C o m p u t e r
f
p
f
q
q=
v=
f (p)
f (u)
f ( p   q)   f ( p )   f ( q)
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 11/40
Trasformazioni Affini
• 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.
C o m p u t e r
in generale non
preservano:
distanze, angoli,
aree...
se lo fanno, le
chiamiamo "rigide"
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 12/40
Trasformazioni Affini
• Si possono esprimere come
moltiplicazione con matrice
  1  11 12 13 14   1    1 
  
 



  2   21  22  23  24   2    2 
f 
 
 3  31  32  33  34   3 
3
  

    
1
0
0
1  1   1 
  0
sempre
coordinate omogenee
punto di partenza
C o m p u t e r
coordinate omogenee
punto di arrivo
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 13/40
Trasformazioni Affini
• Caso vettori
conta solo questo
  1  11 12 13 14   1    1 
  
 



  2   21  22  23  24   2    2 
f 
 
 3  31  32  33  34   3 
3
  

    0 
 10 
0
0
1   10   ...
1
  0
sempre
coordinate omogenee
vettore di partenza
C o m p u t e r
coordinate omogenee
vettore di arrivo
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 14/40
Esempio: traslazione rigida
 x 
 x   x 
 y 
 y   
e cioè:        y 
 z 
 z   z 
 
   
1
1   0 
 x
 x x 
 
y  
y
 
y
f   
 z z 
z
 


1
 
 1 
posso riscriverla come:
 x  1
  
 y  0
f 
0
z
  
1 0
  
C o m p u t e r
0 0  x   x
1 0  y   y 
0 1 z  z
 
0 0 1  1 
vettore di traslazione
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 15/40
Traslazione rigida
1
matrice di
0
traslazione: T( x , y , z )  
0

0
0 0 x 
1 0 y

0 1 z 

0 0 1
l'inversa é ovviamente:
1
0
T 1 ( x , y , z )  T( x , y , z )  
0

0
C o m p u t e r
0 0  x 
1 0   y 
0 1  z 

0 0
1 
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 16/40
Traslazione rigida
cosa succede se la applico ad un vettore ?
 x
1 0
 
0 1
y
 
f   
0 0
z
 

 00 
 
0 0
C o m p u t e r
0  x   x
 x
 



0  y   y
 y
  
1 z  z
z


 


0 1   01 
0
 
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 17/40
Scalatura uniforme
y
y
x
 x
 x 
 
 y 
y
 
f    
 z 
z
 
 
1
 
1
x
 x
 0
 
0 
y
 
f   
0 0
z
 

1
 
0 0
0 0  x 
0 0  y 
 0  z 
 
0 1  1 
matrice di scaling
S( )
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 18/40
Scalatura non uniforme
y
y
x
 x
 x x 
 
 y 
y
 
f    y 
 z z 
z
 


1
1
 


x
 x
 x
 
0
y
 
f   
0
z
 

1
 
0
0
y
0
0
0
z
0
0
0  x 
0  y 
0  z 
 
1  1 
matrice di scaling
inversa?
C o m p u t e r
S ( x ,  y ,  z )
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 19/40
Scalatura
nota: la scalatura scala anche la distanza dall'origine
y
y
x
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 20/40
x
Shearing
• Lo spostamento e’ proporzionale alla coord y
x  x  y cot 
y  y
z  z
1 cot 
0
1

H xy ( ) 
0
0

0
0
C o m p u t e r
0
0
1
0
0
0

0

1
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 21/40
Rotazione attorno all'asse z
y
(x’,y’)

z
(x,y)

x

partenza:
x   cos 
y   sin 
arrivo:
x   cos(   )   cos  cos   sin  sin   x cos   y sin 
y   sin(    )   cos  sin    sin  cos  x sin   y cos 
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 22/40
Rotazione attorno all'asse z
x  x cos   y sin 
y '  x sin   y cos 
 x 
 x   xcos - ysin  
 y 
 y   xsin   y cos 
   RZ ( )    

 z 
z 

z
 
  

1
1
1
 
  

cos
 sin 
RZ ( )  
 0

 0
C o m p u t e r
- sin 
cos
0
0
y
(x’,y’)

z
(x,y)

x

0 0
0 0
1 0

0 1
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 23/40
Rotazione attorno all'asse x, y, o z
1
0
RX ( )  
0

0
0
cos
sin 
0
- sin 
cos
0
0
0
0
0

1
 cos
 0
RY ( )  
- sin 

 0
e le inverse?
RX ( ) 1  RX ( )  RX ( )T
C o m p u t e r
0 sin 
1
0
0 cos
0
0
0
0
0

1
cos
 sin 
RZ ( )  
 0

 0
- sin 
cos
0
0
0 0
0 0
1 0

0 1
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 24/40
Rotazione intorno ad un asse
parallelo all'asse z
y
y
z
z
x
x
1. Porto il centro di rot nell'origine
1
traslazione T
3
2. Ruoto
traslazione T-1
3. Rimetto a posto
y
y
x
C o m p u t e r
2
rotazione R
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 25/40
x
Rotazione intorno ad un asse
parallelo all'asse z
y
y
z
z
x
1
traslazione T
y
3
traslazione T-1
y
x
C o m p u t e r
f( p )
=
T-1 ( R ( T p ) )
x
2
rotazione R
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 26/40
x
Composizione di trasformazioni
• Moltiplicazione matrici (vettori) ha la propretà associativa
f(p) = T-1 ( R ( T p ) )
= (T-1 R T) 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 ?
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 27/40
Punti VS vettori
v
y
p
z
x
y
M
z
p = ( * , * , * , 1 ) punto all'angolo della casa (punto)
v = ( * , * , * , 0 ) velocità vettoriale del fumo (vettore)
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 28/40
M( v )
M( p )
x
Nessuno si offenda
-1 = B-1A-1
(AB)
• Attenzione all'inversione:
• Associativa si, ma commutativa no!
AB ≠ BA
• fidatevi, l'ordine trasformazioni sarà un problema
y
y
RT
TR
x
C o m p u t e r
x
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 29/40
Cambio di frame (cambio di sistema di riferimento)
• Dati due sistemi di riferimento: v1 , v2 , v3 , p0  u1 , u2 , u3 , q0 
p = [a1 ,a2 ,a3 ,1]
coordinate di p
nel primo sist. di rif.:
v1
v2
v3
p
= [b1 ,b2 ,b3 ,1]
coordinate di p
nel sec. sist. di rif.:
• Esprimo uno in termini dell’altro:
u1   11v1   12v2   13v3
u2   21v1   22v2   23v3
u3   31v1   32v2   33v3
q0   41v1   42v2   43v3  p0
C o m p u t e r
G r a p h i c s ‧ 2005/06 ‧
u1
u2
u3
q
matrice di cambio
di frame
 a1   11  21  31
a  
 2    12  22  32
 a3   13  23  33
  
1
0
0
0
U n i
v e r si t à 
d e l l ’ I n s u b r i a - 30/40
 41   b1 
 42  b2 
 43  b3 
 
1 1
Cambio di frame (cambio di sistema di riferimento)
caso particlare: arrivo a sistema di riferimento canonico
• Dati due sistemi di riferimento: v1 , v2 , v3 , p0  u1 , u2 , u3 , q0 
p = [a1 ,a2 ,a3 ,1]
coordinate di p
nel primo sist. di rif.:
1,0,0
0,1,0
0,0,1
0,0,0
= [b1 ,b2 ,b3 ,1]
coordinate di p
nel sec. sist. di rif.:
• Esprimo uno in termini dell’altro:
u1  (  11 ,  12 ,  13 )
u 2  (  21 ,  22 ,  23 )
u3  (  21 ,  22 ,  23 )
q0  (  21 ,  22 ,  23 )
C o m p u t e r
G r a p h i c s ‧ 2005/06 ‧
u1
u2
u3
q
matrice di cambio
di frame
 a1   11  21  31
a  
 2   u121 u222 u323
 a3   13  23  33
  
1
0
0
0
U n i
v e r si t à 
d e l l ’ I n s u b r i a - 31/40
 41   b1 
q42  b2 
 43  b3 
 
1 1
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)
shearing
rotazioni
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 32/40
Rotazioni generiche
• Una rotazione generica é definita da:
– angolo,
– asse
– punto di applicazione
• come si fa?
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 33/40
Ripasso: prodotto scalare e vettoriale
• Prodotto Scalare ("dot-product", "internal product"):
vettore x vettore → scalare
( x , y , z )  (  x ,  y ,  z )   x  x   y  y   z  z
Proprietà
commuta u  v  v  u
lineare 1/2 ( u  v)  w  u  w  v  w
lineare 2/2 (u )  v  u  (v)   (u  v)
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 34/40
Ripasso: prodotto scalare e vettoriale
• Prodotto Scalare ("dot-product", "internal product"):
vettore x vettore → scalare
( x , y , z )  (  x ,  y ,  z )   x  x   y  y   z  z
Proprietà
per il modulo:
quindi, per calcolare
una distanza tra punti:
e anche:
C o m p u t e r
v  vv
P Q 
P  Q   P  Q 
v  v  0  v  (0,0,0)
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 35/40
Ripasso: prodotto scalare e vettoriale
• Prodotto Scalare ("dot-product", "internal product"):
vettore x vettore → scalare
( x , y , z )  (  x ,  y ,  z )   x  x   y  y   z  z
Proprietà
molto utilmente:
quindi se u e v
non sono nulli:
e, se u e v
sono normalizzati:
C o m p u t e r
u  v  u v cos 
u  v  0  u e v ortogonali
u  v  cos 
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 36/40
Ripasso: prodotto scalare e vettoriale
• Prodotto Vettoriale ("cross-product", "external product"):
vettore x vettore → vettore
Proprietà
 y  z   z  y 


( x ,  y ,  z )  (  x ,  y ,  z )   z  x   x  z 
 x  y   y  x 


non commuta:
u  v  (v  u )
uxv
il risultato è ortogonale
ad entrambi
gli operandi: (u  v)  v  (u  v)  u  0
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 37/40
u
v
Ripasso: prodotto scalare e vettoriale
• Prodotto Vettoriale ("cross-product", "external product"):
vettore x vettore → vettore
Proprietà
 y  z   z  y 


( x ,  y ,  z )  (  x ,  y ,  z )   z  x   x  z 
 x  y   y  x 


molto utilmente:
quindi se u e v
non sono nulli:
e, se u e v
sono normalizzati:
C o m p u t e r
u  v  u v sen
u  v  0  u e v allineati
u  v  sen
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 38/40
Esercizio: transformazione di vista
• Input:
1) camera position Cpos
2) direzione di vista Cdir
3) vettore di alto Cup
• Output:
Matrice di Trasformazione
world frame → eye frame
xe
-ze
y
Cup
ye
Oe
sistema di riferimento
della camera
x
0
sistema di riferimento
globale (wolrd frame)
C o m p u t e r
(eye frame)
z
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 39/40
Transform
y
v0
0) transformazione di modellazione
1) transformazione di vista
2) transformazione di proiezione
3) transformazione di viewport
v1
x
v2
z
object Coordinates
v1
v0
v2
screen Space
0
3
y
v1
v0
x
y
v2
z
world Coordinates
C o m p u t e r
1
v1
-z
x
v0
1
v2
2
v0
1
v2
-1
v1
y
v1
x
-z
v2
v0
-1
view Coordinates
Normalized Device
G r a p (a.k.a.
h i c seye
‧ 2Coordinates)
0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b Coordinates
r i a - 40/40
Scene composite
sist coord
macchina
sist coord
ruota
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 41/40
Rendering di scene composite
M matrice di modelling usata
(da settare prima del rendering
di ogni pezzo)
TM matr traslazione macchina
(da mondo a macchina)
RM matr rotazione macchina
(da mondo a macchina)
TRi matr traslazione ruota i
TM
(da ruota a macchina!)
Come viene l'algoritmo di rendering?
C o m p u t e r
sist coord
mondo
(globale)
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 42/40
Stack di matrici di modelling!
TMRMTR0
TMRM
C o m p u t e r
M
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 43/40
Transform
y
v0
0) transformazione di modellazione
1) transformazione di vista
2) transformazione di proiezione
3) transformazione di viewport
v1
x
v2
z
object Coordinates
v1
v0
v2
screen Space
0
3
y
v1
v0
x
y
v2
z
world Coordinates
C o m p u t e r
1
v1
-z
x
v0
1
v2
2
v0
1
v2
-1
v1
y
v1
x
-z
v2
v0
-1
view Coordinates
Normalized Device
G r a p (a.k.a.
h i c seye
‧ 2Coordinates)
0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b Coordinates
r i a - 44/40
Trasformazione di proiezione
• Prima o poi dovremo farlo: da 3D a 2D !
y
v1
-z
x
1
v2
v0
view Coordinates
(a.k.a. eye Coordinates)
C o m p u t e r
2
v0
1
v2
-1
-1
v1
y
v1
x
-z
v2
v0
normalized projected
coordinates
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 45/40
Trasformazione di proiezione
• Vecchio problema:
– (in arte, architettura progettazione)
• come riportare
– su un piano (immagine 2D)
– oggetti 3D
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 46/40
Trasformazione di proiezione
• Modo 1:
– facile: togliamo una coordinata
– ad es. azzeriamo la z
– matrice corrisponente:
1
0
PZ  
0

0
C o m p u t e r
0 0 0

1 0 0
0 0 0

0 0 0
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 47/40
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
– direzioni di vista costanti
1
0
PZ  
0

0
0 0 0

1 0 0
0 0 0

0 0 0
– Ci manca una scalatura non uniforme
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 48/40
Trovare le differenze...
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 49/40
Come si svolge fisicamente il processo:
• Occhio o macchina fotografica
il concetto è lo stesso:
CCD o pellicola
(2D screen buffer)
retina
(2D screen
buffer)
lenti
lenti
distanza
focale
C o m p u t e r
distanza
focale
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 50/40
Nostro modello semplificato:
• pin-hole camera
y
image
-x
plane
-z
distanza
focale
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 51/40
Nostro modello semplificato:
nota: niente 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
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 52/40
Matematicamente
y
image plane
x
-z
centro di
proiezione
(origine)
(xp , yp , z p )
( x, y , z )
distanza
focale d
C o m p u t e r
x xp

z d
x
xp 
z/d
y
yp 
z/d
zp  d
Nota:
non è lineare né affine;
non è neanche reversibile.
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 53/40
Ritocchiamo la notazione
• Esprimo i punti anche con la notazione
 wx 
 wy 
p 
 wz 
 
w
 wx 
 wy 
 
 wz 
 
w
C o m p u t e r
con
w0
divisione per
4ta comp
anche detta
normalizzazione affine
 x
 y
 
z
 
1 
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 54/40
Proiezione prospettica
1
0
matrice di trasformazione
per la proiezione prospettica: P  
0

0
 x
 x 
 y
 y 

P   
z
 z 
 


1 
z / d 
C o m p u t e r
0
1
0
0
0
1
0 1/ d
divisione per
4ta comp
0
0
0

0
questa operazione
si fa per ultima.
La 3 e 4
componente
ci saranno utili !
 x 
z/d 
 y 


z/d 
 d 
 1 


G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 55/40
In realtà non si scarta la terza dimensione:
ci servirà
y
v1
-z
x
v2
v0
view Coordinates
(a.k.a. eye Coordinates)
Moltiplicazione per
la matrice di
proiezione
C o m p u t e r
P
cosidette
"Clip
Coordinates"
normalizzazione
affine
y
x
z
La parte visibile casca in
coordinate proiettate
e normalizzate (affine)
[ancora 3D!]
[-1,1] x [-1,1] x [-1,1]
quindi dette anche
"Normalized Device
Coordinates"
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 56/40
Proiezione prospettica: che effetto fa
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 57/40
Proiezione Prospettica: che effetto fa
d piccolo
d grande
Più distorsione
prospettica.
Proporzioni
più mantenute
Effetto "fish-eye"
(grandangolo)
Effetto "zoom"
(eg. vista dal
satellite)
C o m p u t e r
d infinito
(diventa
una proiezione
ortogonale)
1
0
P
0

0
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 58/40
0
1
0
0
0
1
0 1/ d
0
0
0

0
Curiosità
• effetto Vertigo
– detto anche "contra-zoom" o "track & zoom"
C o m p u t e r
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 59/40
scalatura non uniforme
shearing
proiezione ortigonale
trasf. affine generica
proiezione prospettica
C con
o m p rinormalizzazione
u t e r G r a p h i c s ‧ 2005/06
colineariltà
scalatura uniforme
rapporti
lunghezze
su una linea
rotazione
angoli
traslazione
lunghezze
Considerazione
V
V
X
X
X
X
X
X
V
V
V
X
X
X
X
X
V
V
V
V
V
V
V
X
V
V
V
V
V
V
V
V
‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 60/40
Considerazione
Modellazione + Vista:
trasformazioni rigide
(o almeno
mantengono
gli angoli)
y
v0
v1
x
v2
teniamo una sola
matrice per entrambe
(la matrice
"Modellazione-Vista")
z
teniamo questa
matrice separata
(la matrice
"Proiezione")
Proiezione:
non mantiene gli angoli
object Coordinates
v1
v0
v2
screen Space
modellazione
viewport
v2
z
world Coordinates
C o m p u t e r
vista
v1
v0
x
y
v1
-z
x
v0
v2
proiezione
y
1
v0
1
v2
-1
v1
y
v1
x
-z
v2
v0
-1
view Coordinates
Normalized Device
G r a p (a.k.a.
h i c seye
‧ 2Coordinates)
0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b Coordinates
r i a - 61/40
Stack di matrici di MODEL-VIEW
V TMRMTR0
V TMRM
V
C o m p u t e r
M
G r a p h i c s ‧ 2 0 0 5 / 0 6 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a - 62/40
Scarica

ppt