• Non ci sono risultati.

Computer Graphics

N/A
N/A
Protected

Academic year: 2021

Condividi "Computer Graphics"

Copied!
18
0
0

Testo completo

(1)

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) Z

rasterizer 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

v0

v1

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

(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

• :"trasformazione di vista":

portare la scena davanti alla camera

1) Trasformazione di vista

sistema di riferimento della camera (eye coords)

yyyy

eeee

xxxx

eeee

----zzzz

e e e e

O O O O

e e e e

yyyy

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

v0

v1

v2

view Coordinates (a.k.a. eye Coordinates)

y -x -z

v0

v1

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]

2

a [0..res

x

]x[0..res

y

] (pixels)

y 2

-z

v0

v1

v2

view Coordinates (a.k.a. eye Coordinates)

y -x -z

v0

v1

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...

(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

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

v0

v1

v2

view Coordinates (a.k.a. eye Coordinates)

y -x -z

v0

v1

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 α α β β β α β α β α β

α , , ) ⋅ ( , , ) = + +

(

(4)

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

(5)

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

0

v

1

f v

0

f v

1

f α + β = α + β (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

(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

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 γ

γ

γ

(7)

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

γ

z

S

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

xy

z 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

θ θ

θ

θ

θ

(8)

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 ?

(9)

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

0

a

1

a

2

1

u 0 u 1 u 2 q 0 b

0

b

1

b

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

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

0

a

1

a

2

1

u 0 u 1 u 2 q 0 b

0

b

1

b

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

Transform

x y

z v0 v1

v2

world Coordinates

1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport

2

y -z

v0

v1

v2

view Coordinates (a.k.a. eye Coordinates)

y x

-z

v0

v1

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

(10)

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

v0

v1

v2

view Coordinates (a.k.a. eye Coordinates)

y x

-z

v0

v1

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

(11)

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

pov

2) target position: p

target

3) vettore di alto: v

up

Esempio 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

pov

2) target position: p

target

3) vettore di alto: v

up

Esempio tipico di

costruzione transformazione di vista

sistema di riferimento della camera (eye frame)

yyyy

eeee

xxxx

eeee

----zzzz

eeee

oooo

eeee

yyyy

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

pov

2) target position: p

target

3) vettore di alto: v

up

Esempio tipico di

costruzione transformazione di vista

yyyy

eeee

xxxx

eeee

----zzzz

eeee

oooo

eeee

yyyy

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

eeee

xxxx

eeee

zzzz

eeee

oooo

eeee

0 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

eeee

xxxx

eeee

zzzz

eeee

oooo

eeee

0 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

0

v

1

v

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

(12)

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

-1

A

-1

R 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

v

matrice di modellazione T

m

matrice di vista T

p

matrice di proiezione T

vp

matrice di viewport

y -z

v0

v1

v2

view Coordinates (a.k.a. eye Coordinates)

y x

-z

v0

v1

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

mv

matrice di modellazione-vista

= T

v

*T

m

T

p

matrice di proiezione T

vp

matrice di viewport

y -z

v0

v1

v2

view Coordinates (a.k.a. eye Coordinates)

y x -z

v0

v1

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

mvp

matrice di

modellazione-vista-proiezione

= T

p

* T

v

*T

m

T

vp

matrice di viewport

y x

-z

v0

v1

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

(13)

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

0

M

1

M

2

M

3

M

4

M

5

M

6 posizonamento 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 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

0

M

1

M

2

M

3

M

4

M

5

M

6 spazio mondo spazio

vista

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

(14)

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

0

M

1

M

2

M

3

M

4

M

5

M

6

setIdentity 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

0

M

1

M

2

M

3

M

4

M

5

M

6

M

9

photocamera 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

0

M

1

M

2

M

3

M

4

M

5

M

6

M

9

photocamera montata sull’automobile

posizonamento della camera (rispetto all’automobile)

spazio

mondo spazio

vista

= ( M

2

M

9

)

-1

= M

9-1

M

2-1

Un 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

Riferimenti

Documenti correlati

• Eseguito dall'applicazione (SW) – richiede algoritmi e strutture dati appositi – ogni cull può essere oneroso (overhead) – ma scarta primitive presto presto presto presto e

[r]

[r]

Flat shading Goraund shading Phong Shading (*) talvolta (ma impropriamente) detto: per-pixel lighting. quando si usano normali

[r]

di vista riflessa dalla norm.). Environment

[r]

[r]