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 6 / 1 7 ‧ 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
z
y
x v
0v
1v
2 world Coordinates1
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
2 screen Space3
ClipCoordinates
1
1 -1
-1 x
z
y
x v
0v
1v
2 object Coordinates0
0) transformazione di modellazione
2
Trasformazione di proiezione
• Prima o poi dovremo farlo: da 3D a 2D !
y 2
-z v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
y x -z v
0v
1v
2v
0v
2v
1Clipcoordinates
1
1 -1
-1 x
Nota:
solo per i punti! (es. i vertici dei triangoli) non per i vettori (es. le normali dei triangoli) Le normali si possono “fermare” allo spazio vista (o anche solo mondo)
( cmq lo spazio in cui che saranno utilizzate, vedi lighting dopo)
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 6 / 1 7 ‧ 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 – oggetti 3D – su un
piano 2D Prospetto Frontale Assonometria cavaliera
Assonometira
Isometrica Prospettiva a
punto di fuga singolo Prospettiva a punto di fuga triplo Pianta Obliqua Alcune soluzioni classiche:
Spazio “clip”
• X e Y: da -1 a +1
– indipendentemente da dimensioni / proporzioni del viewport – X = -1 bordo sx X = +1 bordo dx
– Y = -1 bordo inf Y = +1 bordo sup – origine: centro del’immagine renderizzata I – se un punto ha una coord X o Y al di fuori
di [-1, +1] => non è nel quadro
• (vedremo, vale anche per la Z)
• Oggetto (o primitiva) solo parzialmente nel viewport:
«clip» it !
– andrà spezzata in una
parte da mostrare, e una no
– da cui il nome dello spazio
• Modo 1:
– da 3D a 2D? facile: ignoriamo la z (per ora) – per la x e y uno zoom factor k
= 1/raggio della scena che vogliamo inquadrare – 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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di proiezione
1 0 0 0
0 1 0 0
0 0 0
0 0 0 k k P Z
Trasformazione di proiezione
• E' una proiezione ortogonale
– non c'è prospettiva – simula:
• il punto di vista all'infinito
• con un cannocchiale mooolto potente
• lunghezza focale infinita
– direzioni di vista costanti su tutta la scena
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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trovare le differenze...
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 6 / 1 7 ‧ 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 image
plane
Parametri intrinseci della camera:
(quelli principali)
• dim image plane ( w , h ) (in spazio vista)
• distanza focale ( d ) (in spazio vista) oppure Field of View (FoV)
– (come ottenere uno dall’altro?)
– d si usa nei conti, ma FoV è intuitivo da settare, :
• FoV grande >60° (dist foc. piccola): «grandangolo»
• FoV piccolo <45° (dist foc. grande): «teleobiettivo»
distanza focale d
w
h Field of View (verticale)
(angolo)
Da Field of View a Distanza focale
distanza focale
= Field of View verticale (angolo)
ℎ
Vista di fianco:
= ℎ tan 2
distanza focale
= Field of View orizzontale (angolo)
Vista dall’alto:
= tan 2 y
z
x z
Pin Hole camera per semplicità, immaginiamoci il piano immagine davanti alla camera (e nn ribaltato), piuttosto che·· dietro (e ribaltato).
(cioe’ sul piano z = - d )
(in spazio 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 6 / 1 7 ‧ 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 è affine;
non mantiene: rapporto fra distanze colineari (ma mantiene: colinearità)
con k t.c. z
p d
z d k /
quindi…
d z y d
z x d
z y x
p p p
/ /
e
Estendiamo la rappresentazione di punti e vettori in coordinate omogenee
1 z y x p
0 z y x v
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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Estendiamo la rappresentazione di punti e vettori in coordinate omogenee
* z y x p
0 z y x v
Punti: Vettori:
≠0 0
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 6 / 1 7 ‧ 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 alcune delle coordinate omogenee
del punto che ha le seguenti
coordinate cartesiane
3 1 2
0 3 1
2 sono le uniche
coordinate omogenee del vettore che ha le
seguenti
coordinate cartesiane
3 1 2
…
punto
vettore queste
sono in
“forma normale”
( w = 1 )
Coordinate omogenee di punti
• Il punto P di coordinate cartesiane (x,y,z) è rappresentato in coordinate omogenee
come (xw,yw,zw , w), con w qualunque (ma non 0)
• Set di coordinate omogenee diversi (x, y, z, w) e (x′, y′, z′, w′) possono rappresentare lo stesso punto;
– [quando?]
• Quando w = 1 (forma canonica ) le coord cartesiane del punto coincidono con le prime tre coord omogenee.
• Con (x, y, z, w ≠ 0) si rappresentano punti , con (x, y, z, 0) si rappresentano vettori.
• Nota: tutte le matrici di trasformazione viste fin’ora funzionanto
anche con questa notazione generalizzata! Es: VERIFICA.
Coordinate omogenee
• Tutte le matrici di trasformazione che abbiamo visto fin’ora continuano a funzionare anche con i punti espressi in coordinate omogenee non canoniche (w!=1)
• Es, traslazione:
• Ma possiamo esprimere anche la proiezione prospettica…
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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
10 80 35 70
10 50 15 20
1 0 0 0
3 1 0 0
2 0 1 0
5 0 0 1
Matrice di traslazione del vett ( 5 , 2 , 3 )
Punto di coord cartesiane (2 , 1.5 , 5)
Punto di coord cartesiane (7 , 3.5 , 8)
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
d d z
y d z
x
/
Esprime il punto /
di coordinate cartesiane
matrice di trasformazione per la
proiezione prospettica
(nota: non è 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 6 / 1 7 ‧ 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 v
0v
1v
2view Coordinates (a.k.a. eye Coordinates)
x no rm al iz za zi on e af fin e
y
z
x
clip space [ancora 3D!]
un bel CUBO!
Moltiplicazione per la matrice di
proiezione
La parte visibile casca in [-1,1] x [-1,1] x [-1,1]
quindi dette anche
"Normalized Device Coordinates"
Dettaglio tecnico
• Il rasterizzatore: (comportamento fisso)
– prende vertici in clip coordinates
– produce frammenti a una data screen coordinates
• cioè le «in pixel», e.s. in [0..639] x [0..479]
– applica cioè la trasf di viewport automaticamente (e, prima, anche la div per w )
quindi:
• Il vertex processor (programmabile!)
– deve produrre clip coordiantes del vert. processato
(anche non 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 6 / 1 7 ‧ 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 v
0v
1v
2 world Coordinates1
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
2 screen SpaceClipCoordinates
1
1 -1
-1 x
x
y
z v
0v
1v
2 object Coordinates0
0) transformazione di modellazione
2
3
Dettaglio tecnico
fra m m en ti (c ia sc un o co n sc re en c oo rd .)
Ve rti ci de lla m es h pixel
finali
(nello screen-buffer)
Ve rti ci pr oi et ta ti (c lip c oo rd s! )
Z
rasterizer triangoli
co m pu ta zi on i pe r f ra m m en to
z
y
x v
0v
1v
2v
0v
1v
2rasterizer segmenti rasterizer
punti
co m pu ta zi on i pe r v er tic e
OBJECT
COORDS CLIP
COORDS SCREEN
COORDS
Trasformazione di viewport
• Spazio Clip: (-1 , +1) x (-1 , +1)
– è quadrato!
• Spazio Viewport: [ 0..resX ] x [ 0..resY ]
– è rettangolare!
• Trasf. Viewport
– scaling NON uniforme – (e traslazione)
quindi:
• per mantenere l’ aspect ratio bisogna includere nel passaggio precedente (la proiezione!) uno scaling NON uniforme (in verso opposto)
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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Trasformazione di viewport
Y X VIEWPORT
RES y
RES x
y f x
2 / ) 1 (
2 / ) 1 (
[0,1]x[0,1] in
[-1,+1]x[-0,+1] in
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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Correzione dell’aspect ratio
• Matrice di proiezione prospettica con
correzione dell’aspect ratio a = RESX / RESY oppure
0 /
1 0 0
0 1 0 0
0 0 0
0 0 0 1
d P a
0 /
1 0 0
0 1 0 0
0 0 1 0
0 0 0 / 1
d a
P
a
Nota: la trasformazione di proiezione dipende dai parametri estrinseci della macchina fotografica… compreso l’aspect ratio del suo frame
Una matrice di Proiezione Prospettica più utile
• Il realtà, sarà utile considerare lo spazio CLIP
e quello viewport come dotati di estensione non solo in X e Y, ma anche in Z
– X e Y sono usate per rasterizzare i triangoli in 2D – la Z sarà usata per altri algoritmi
• Spazio clip: vale stessa regola anche in Z:
– se Z compreso fra -1 e +1: oggetto nel quadro
– se Z > +1, oggetto troppo vicino alla camera: scartato!
– se Z < -1, oggetto troppo lontano dalla camera: scartato!
• La matrice che abbiamo visto produce Z = -d sempre.
– Vogliamo invece mappare un l’intervallo in spazio vista -Znear, -Zfar su l’intervallo in spazio Clip -1 +1. Come?
Znear e Zfar (due numeri positivi, scelta arbitaria):
la distanza minima e massima dalla vista di un oggetto che
vogliamo far comparire nel quadro
Una matrice di Proiezione Prospettica più utile
• Il realtà, sarà utile considerare lo spazio CLIP
e quello viewport come dotati di estensione non solo in X e Y, ma anche in Z
– X e Y sono usate per rasterizzare i triangoli in 2D – la Z sarà usata per altri algoritmi
• Spazio clip: vale stessa regola anche in Z:
– se Z compreso fra -1 e +1: oggetto nel quadro
– se Z > +1, oggetto troppo vicino alla camera: scartato!
– se Z < -1, oggetto troppo lontano dalla camera: scartato!
• La matrice che abbiamo visto produce Z = -d sempre.
– Vogliamo invece mappare un l’intervallo in spazio vista [-Znear, -Zfar]
su l’intervallo in spazio Clip Z in [-1 +1].
– Quale matrice lo fa?
Znear e Zfar (due numeri positivi, scelta arbitaria):
la distanza minima e massima dalla vista di un oggetto che vogliamo che appaia nel quadro
• Vogliamo quindi che:
• Soluzione:
Una matrice di Proiezione Prospettica più utile
) (
2 / /
F N
F N F
N F N
z z z
z z z
z z z
z y a d
z x d
z y x
f
1
/ /
F F
F
z y a d
z x d
z y x f
z
z z
z z z
z
z z z
a d y
d x
z y x
P
N F
N F N
F N F
) (
2 ) (
) (
1
a aspect ratio d lunghezza focale
1
/ /
N N
N
z y a d
z x d
z
y
x
f
• Quindi
Una matrice di Proiezione Prospettica più utile
0 1
0 0
) (
2 ) (
) 0 (
0
0 0
0
0 0
0
N F
N F N
F N F
z z
z z z
z z a z
d d P
a aspect ratio d lunghezza focale
Matrice di Proiezione
per Assonometria Cavaliera
• Idea intuitiva: ogni metro in direzione Z comporta uno spostamento in X e Y di mezzo metro indietro (nel disegno)
Assonometria cavaliera
1 0 0 0
?
?
?
?
0 2 / 0
0 2 / 1 0 1
a P a
? ) 2 / (
2 /
a z y
z x
z y x f
z
x y
Questa trasf di proiez è affine
Il solito aspect ratio dell’immagine finale che è compito della trasf di proiez correggere
Cosa fare della Z?
Matrice di Proiezione
per Assonometria Cavaliera
• Idea intuitiva: sulla Z, un dato intervallo [ zmin , zmax ] deve essere rimappato in [-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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Assonometria cavaliera z
x y
MIN MAX
MIN MAX
z z
z z z
a z y
z x
z y x f
2
) 2 / (
2 /
1 0
0 0
0 2 0
0 2
/ 0
0 2
/ 1 0
1
MIN MAX
MIN MAX MIN
MAX