• Non ci sono risultati.

Computer Graphics

N/A
N/A
Protected

Academic year: 2021

Condividi "Computer Graphics"

Copied!
11
0
0

Testo completo

(1)

Computer Graphics

Marco Tarini

Università dell’Insubria

Corso di Laurea in Informatica Anno Accademico 2015/16

Lezione 3: vector and point algebra

fra m m en ti (c an di da ti pi xe ls )

Rasterization based pipeline

Ve rti ci (p un ti in R

3

) Ve rti ci pr oi et ta ti (p un ti in R

2

)

Z

RASTERIZZAZIONE

z

y

x v

0

v

1

v

2

v

0

v

1

v

2

co m pu ta zi on i pe r v er tic e sc re en b uf fe r

computazioni

per frammento

(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 6 / 1 7 ‧ 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 (c an di da ti pi xe ls )

Rasterization based pipeline (più in dettaglio 1/2)

Ve rti ci (p un ti in R

3

) Ve rti ci pr oi et ta ti (p un ti in R

2

)

Z

RASTERIZZAZIONE

z

y

x v

0

v

1

v

2

v

0

v

1

v

2

co m pu ta zi on i pe r v er tic e pi xe l f in al i

co m pu ta zi on i pe r f ra m m en to sc re en b uf fe r

ou tp ut co m bi ne r

fra m m en ti (c an di da ti pi xe ls )

Rasterization based pipeline (più in dettaglio 2/2)

Ve rti ci (p un ti in R

3

) Ve rti ci pr oi et ta ti (p un ti in R

2

)

Z

rasterizer segmenti

z

y

x v

0

v

1

v

2

v

0

v

1

v

2

rasterizer triangoli rasterizer

punti

co m pu ta zi on i pe r v er tic e

qui “transform”

Point Lines

om pu ta z C rim va pe r p iti Tris pi xe l f in al i

co m pu ta zi on i pe r f ra m m en to sc re en b uf fe r

ou tp ut co m bi ne r

al video

(3)

• Per ogni vertice di ogni primitiva:

• Questa operaz è un caso particolare di

TRASFORMAZIONE SPAZIALE, che vedremo

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

Transform

z

y

x v

0

v

1

v

2

v

0

v

1

v

2 coordinate in cui

sono definiti i vertici dell’oggetto (“object coords”)

screen Coordinates

stage programmabili: vengono eseguiti dei programmi arbitrari detti shaders.

fra m m en ti (c an di da ti pi xe ls )

Rasterization based pipeline

Ve rti ci (p un ti in R

3

) Ve rti ci pr oi et ta ti (p un ti in R

2

)

Z

rasterizer segmenti rasterizer triangoli rasterizer

punti

co m pu ta zi on i pe r v er tic e qui

Point Lines

om pu ta z C rim va pe r p iti Tris pi xe l f in al i

co m pu ta zi on i pe r f ra m m en to sc re en b uf fe r

ou tp ut co m bi ne r

e qui opzionalmente qui

stage Hard Wired:

no flessibilità, efficienza, ottimiz HW

(4)

Shaders

• Programmi caricati sulla scheda video

– vertex shader, geometry shader, fragment shader…

• Eseguono le operazioni preposte in ogni stage – per es: vertex shader: transform dei vertici

– per es: fragment shader: lighting

• A basso livello: scritti in un assembler specifico – per il linguaggio macchina della scheda video

– che ha un Instruction Set specializzato

• Li scriviamo in un ling. ad alto livello: es GLSL ! – verrà compilato in quell’assembler

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

GLSL

• (fa parte delle specifiche OpenGL)

• Linguaggio alto livello per scrivere shaders (di tutti i tipi: per-vertice, per-frammento…)

• Simile al C (C-like)

• Sintassi comoda per gestire l’algebra di punti e vettori , che stiamo per vedere

• (quasi) la stessa identica sintassi è adottata da alcune librerie C++ : es. «GLM»

e alcuni linguaggi simili: HLSL (by Microsoft)

(5)

Algebra per CG

• Qui per algebra intendiamo alcuni insiemi di entità e le operazioni definite su di loro

• Le nostre entità e operazioni hanno una immediata interpretazione «intuitiva», «spaziale» in 3D (o in 2D)

– (si possono vedere con gli occhi analitici della matematica o con gli occhi intutivi della mente)

La [ natura ] è scritta in questo grandissimo libro che continuamente ci sta aperto innanzi agli occhi, io dico l’universo, ma non si può intendere se prima non s’impara a intender la lingua e conoscer i caratteri nei quali è scritto. Egli è scritto in lingua matematica.

Galileo

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

Algebra per CG

• Di ogni entità ci interessa:

– una interpretazione 3D/2D intutiva (semantica intuitiva) – come rappresentarle internamente, con quali dati – cioè con quale «tipo» rappresentarle in GLSL

• Di ogni op ci interessa:

– una interpretazione 3D/2D intuitiva (semantica intuitiva) – come sono implementate, con quali op matematiche

(semantica operazionale) – proprietà

– notazione: come si scrivono «sulla carta» (una sintassi)

– notazione: come si scrivono in GLSL (un’altra sintassi)

(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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Algebra dello Spazio affine

• Tre entità – scalari – vettori – punti

attributi:

lunghezza, direzione unico attributo:

la posizione, rispetto ad un

sistema di riferimento

(vedremo)

• In GLSL – float – vec3 – vec3

tre float componenti: x,y,z

(immaginiamoli pure come come campi

di tipo float in una classe chiamata vec3)

Spazio affine: le due operazioni sui punti

• Somma (punto , vettore ) → punto

• Sottrazione (punto , punto) → vettore

punto a

punto ( a + v ) vettore

v

punto a

punto b vettore

( b – a ) remember:

“punta meno coda”

:-)

l’op inversa

(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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Algebra: Spazio vettoriale

• Due entità:

– scalari – vettori

• Operazioni (1/2)

– somma e prodotto tra scalari (ovviamente)

– somma fra vettori

– prodotto vettore x scalare → vettore

(commutativo)

(lo spazio vettoriale è chiuso rispetto a:

somma vettoriale e al prodotto con scalari)

Ora concentriamoci solo sui vettori e scalari.

I vettori formano uno spazio vettoriale

Operazioni (2/2)

• Prodotto scalare (fra vettori)

– aka prodotto dot ( dot-product , o inner-product ) – vettore x vettore → scalare

• Prodotto vettoriale (fra vettori) <=== solo in R 3

– aka prodotto cross ( cross-product, outer-product ) – aka prodotto esterno

– vettore x vettore → vettore

• Norma

– vettore → scalare

• Normalizzazione

– vettore → vettore

(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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Prodotto scalare

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

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

Prodotto scalare

• 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

nota:

quindi, per calcolare una distanza tra punti:

riscrittura della norma:

Proprietà

z z y y x

x z

y x z

y

x α α β β β α β α β α β

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

(

(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 6 / 1 7 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Prodotto scalare

• 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 unitari:

quindi se u e v non sono nulli:

molto utilmente:

Altre operazioni che possono tornare utili (anche se non sono canoniche)

• Prodotto “componente x componente”

fra punti e/o vettori

(component-wise product)

• O in effetti quasiasi operaz fra scalari eseguita “componente per componente”

(divisione, etc)

 

 

=

 

 

 

 

z z

y y

x x

z y x

z y x

β α

β α

β α β

β β α

α

α

(10)

Sintassi nei linguaggi GLSL (e simili, es HLSL)

• tipi base:

• operazioni:

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

vec3 float

punto o vettore

un vett di 3 coordinate x,y,z uno scalare

vec3 a , b ; float k;

vec3 c = a + b; // somma di vettori

vec3 e = k * a; // prodotto vettore per scalare vec3 d = a * b; // prodotto componente x componente float f = dot( a, b ); // prodotto dot

vedi anche note sul sito per più esempi (lez 3)

Nei linguaggi GLSL (e HLSL)

• tipi base:

• operazioni:

vec3 float

un vett di 3 coordinate x,y,z, usato per punti o vettori

uno scalare

vec3 a , b ;

vec3 d = a <op> b; // la <op> fatta comp. per comp.

// per es, con + - * /

float c = length( a ) ; // norma (euclidea) di a vec3 d = normalize( a ); // normalizzazione

// (divisione per la norma) // equivalente a

vec3 d = a / length( a );

(11)

Disegno per esercizio 2 (vedi note sul sito)

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

d

n r

r = d + 2c c = k 0 n k 0 = ( d · n )

-d n

d

c

c c

r

Una pallina da ping pong con velocità d rimbalza su un piano di normale n . Trovare la direzione post-impatto r.

Disegno per esercizio 2 (vedi note sul sito)

a v

c

r b

Intersezione raggio sfera:

(e.g. per ray-tracing)

punti su raggio: a + k v (per ogni k >=0 )

punti su sup. sfera: { q . | q – c |= r }

task: trovare b (se esiste): un punto SIA sul raggio che sulla sfera

Riferimenti

Documenti correlati

[r]

[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]