Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.
-
Upload
luciana-costantino -
Category
Documents
-
view
221 -
download
2
Transcript of Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.
![Page 1: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/1.jpg)
Texturing
Daniele Marini
Corso Di Programmazione Grafica aa2007/2008
![Page 2: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/2.jpg)
Programmazione Grafica aa2007/2008 2
Più modalità
• es. muro di mattoni: texture invece di modellazione– mappare una fotografia di un muro di
mattoni su una superficie– simulare opacità del cemento e
“lucentezza dei mattoni” con funzione immagine che modula la lucentezza
– simulare la “rugosità” del mattone con bump mapping
![Page 3: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/3.jpg)
Programmazione Grafica aa2007/2008 3
Come opera
• durante il rendering per ogni locazione su una superficie:– la superficie viene orientata secondo il punto di vista – si applica il modello di illuminazione
• considerando luci e proprietà del materiale• se necessario applicando effetti nebbia o trasparenza
– il colore viene modificato secondo la funzione di texture– se presente si modifica il coefficiente di lucentezza
secondo la funzione di lucentezza– se presente, si modifica la normale secondo la funzione
di bump mapping
![Page 4: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/4.jpg)
Programmazione Grafica aa2007/2008 4
Texture mapping
• 2D, 3D o 4D• La texture è una qualsiasi immagine• L’operazione di mapping trasferisce
l’immagine sulla superficie
![Page 5: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/5.jpg)
Programmazione Grafica aa2007/2008 5
Pipe-line di texturing
Calcola posizionenello spazio mondo
Usa una funzione di proiezioneMAPPING
Usa una funzione di corrispondenza
Applica funzione di trasformazione dei valori
Modifica valore di illuminazione
(x,y,z) Es: proiezione ortografica(proiettare una slide)(u,v) in (0,1)
Da (0,1) a es.(256x256), trovavalore in arrayR,G,B
Es. moltiplica R,G,B per 1.1per evitare valori troppo scuri
Applica modello illuminazione con terna R,G,B
![Page 6: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/6.jpg)
Programmazione Grafica aa2007/2008 6
• La configurazione di texture 2D è definita sul piano s,t - coordinate di coordinate di texture texture normalizzate in [0,1] o in coord. di array, T(s,t) è la texture
• Gli elementi dell’array di texture sono i texelstexels
– La funzione di mapping associa a ogni punto dell’oggetto un unico valore di T, un unico texel
![Page 7: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/7.jpg)
Programmazione Grafica aa2007/2008 7
• I valori di T sono espressi in (R,G,B)• La terna viene usata per
modificare la terna (r,g,b) del punto dell’oggetto come calcolata dal modello di illuminazione durante la fase di shading
![Page 8: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/8.jpg)
Programmazione Grafica aa2007/2008 8
Funzioni di proiezione
• proiezione piana o ortografica– piano su piano
• proiezione parametrica– piano texture su superficie parametrica
• proiezione sferica (a due passi)– piano texture su più superfici
• proiezione cilindrica (a due passi)– piano texture su più superfici
![Page 9: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/9.jpg)
Programmazione Grafica aa2007/2008 9
Proiezione piana
• le coordinate (s,t) della texture sono associate alle coordinate proiettate x,y
![Page 10: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/10.jpg)
Programmazione Grafica aa2007/2008 10
Proiezione parametrica
• Il mapping: se la superficie è parametrica un punto è:
• Si associa T(s,t) a p(u,v)• L’associazione può essere diretta
(u=s, v=t) o lineare :
p(u,v) =
x(u,v)
y(u,v)
z(u,v)
⎡
⎣
⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥
u=as+bt+c
v =ds+et+ f
![Page 11: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/11.jpg)
Programmazione Grafica aa2007/2008 11
u=umin +s−smin
smax−smin
(umax−umin)
v =vmin+t−tmin
tmax−tmin
(vmax−vmin)
Proiezione parametrica
– La funzione è invertibile se ae ≠ bd– La conversione alle coordinate schermo:
– Questo approccio non tiene conto della curvatura, la texture viene tirata (stretched) sulla superficie
![Page 12: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/12.jpg)
Metodo delle proiezioni intermedie
• Per evitare distorsioni nella proiezione occorre trovare un metodo che rispetti “similarità”
• La parametrizzazione non è una similarità
• Nel piano deve preservare gli angoli• In generale deve preservare colinearità,
mappare rette in rette
• Una soluzione è ricorrere a proiezioni intermedie
Programmazione Grafica aa2007/2008 12
![Page 13: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/13.jpg)
Proiezioni intermedie
• Scegliere una superficie intermedia S• Mappare la texture su S• Trovare una funzione di mapping
da S all’oggetto O• La funzione di mapping può essere
diretta o inversa
Programmazione Grafica aa2007/2008 13
![Page 14: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/14.jpg)
Proiezioni intermedie: due passi
• Al primo passo si sceglie la superficie intermedia S
• Al secondo passo si determina il metodo di proiezione da S ad O
• La proiezione può essere diretta o inversa
Programmazione Grafica aa2007/2008 14
![Page 15: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/15.jpg)
Programmazione Grafica aa2007/2008 15
€
Cilindro con raggio r e altezza h :
x = rcos(2πu)
y = rsin(2πu) con u,v ∈ 0,1[ ]
z = v /h
mappa :
s = u
t = v
Primo passo: proiezione cilindrica
– Per proiezione sferica e cilindrica si segue un approccio a due passi:
• Mappare su una sfera o un cilindro (oggetto intermedio) - S
• Mappare la struttura ottenuta sull’oggetto finale - O
![Page 16: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/16.jpg)
Programmazione Grafica aa2007/2008 16
Primo passo: proiezione sferica
• si proietta sulla sfera con l’equazione:
• dove: sono latitudine e longitudine sulla sfera; rx, ry, rz, sono direzioni di proiezione (riflessione), vettori normalizzati
€
=arccos(−rz )
φ = atan2(ry,rx )
dove : 0 ≤ atan2(y,x) ≤ 2π , prende come argomento y/x con x ≠ 0
![Page 17: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/17.jpg)
Programmazione Grafica aa2007/2008 17
Secondo passo• nel secondo passo si sceglie come proiettare sull’oggetto
finale l’oggetto intermedio in funzione della normale al punto considerato sull’oggetto - 3 modi principali:– Mappa diretta: proiezione da I su O con normali determinate
su I– Mappa inversa: determina la normale su O in ogni punto e
individua il punto su I– Mappa inversa: proiezione dal centroide di O con normali
dirette dal centro dell’oggetto finale– Mappa inversa: normali determinate su O; il punto su O è la
riflessione, vista dall’occhio, del punto su I
![Page 18: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/18.jpg)
Programmazione Grafica aa2007/2008 18
Funzioni di corrispondenza• Indicano come deve essere mappata la
texture:– Wrap, repeat, tile: l’immagine viene ripetuta come
una piastrella– Mirror: l’immagine viene ripetuta riflettendola
verticalmente o orizzontalmente– Clamp to edge: i valori esterni a (0,1) sono forzati
agli estremi, il bordo dell’immagine si prolunga su tutta la superficie
– clamp to border: i valori esterni a (0,1) sono resi con un colore proprio, va bene per decalcomanie
![Page 19: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/19.jpg)
Programmazione Grafica aa2007/2008 19
Funzioni di modifica
• Replace: rimpiazza i valori R,G,B della texture agli r,g,b del modello di illuminazione - chiamato anche glow texture
• Decal per simulare decalcomanie: sfrutta canale alfa per modulare r,g,b,alfa con R,G,B,ALFA
• Modulate: moltiplica r,g,b per R,G,B
![Page 20: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/20.jpg)
Programmazione Grafica aa2007/2008 20
Image texture
• Mappare una immagine es. 256 x 256 su una superficie piana; se la superficie proiettata supera o è inferiore alla risoluzione dell’immagine:– Magnification– Minification
![Page 21: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/21.jpg)
Programmazione Grafica aa2007/2008 21
Magnification
• Nasce aliasing, si supera con interpolazione– Nearest neighbor: produce
pixellizzazione, va bene per piccoli ingrandimenti (max fattore 2)
– Interpolazione bilineare: smoothing– Altri filtri per ingrandimenti elevati
(ricampionamento)
![Page 22: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/22.jpg)
Programmazione Grafica aa2007/2008 22
Magnification
Nearest neighbor inpterpolazione bilineare
![Page 23: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/23.jpg)
Programmazione Grafica aa2007/2008 23
Interpolazione bilineare
• Interpola Linearmente i valori di texture di 4 texel vicini
t1 t2
t3 t4
i valore textur in i =
Lerp(lerp(t1, t3), lerp(t2, t4))
![Page 24: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/24.jpg)
Programmazione Grafica aa2007/2008 24
Minification
• Molti texel possono cadere sullo stesso pixel– Ancora nearest neighbor, sceglie il texel più
vicino al pixel, aliasing forte, soprattutto nella animazione
– Ancora interpolazione bilineare: sceglie il texel medio per il pixel
– Meglio ricampionamento dell’immagine, in modo da garantire un texel per pixel (frequenza di campionamento ottima)
![Page 25: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/25.jpg)
Programmazione Grafica aa2007/2008 25
Minification• Molti texel coprono un pixel (sotto
campionamento)
Artefatti di sotto camp.
un pixel
Solutione:
Accresci campioni o riduci la frequenza massima della texture
metodi:
1. Mip-mapping 2. Rip-mapping3. Sum Area Table
![Page 26: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/26.jpg)
Programmazione Grafica aa2007/2008 26
MipMapping• Mip: “multi in parvo”
– L’immagine di texture originale viene affiancata da molte versioni via via più piccole, mediante ricampionamento dell’immagine originale
– Livello 0 originale– Livello 1 sottocampionato a un quarto
(subtexture), si usa filtro gaussiano– Si prosegue fino alla risoluzione del pixel – Attenzione al gamma! per garantire
brightness costante
![Page 27: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/27.jpg)
Programmazione Grafica aa2007/2008 27
MipMapping
• Per scegliere quale texture usare si usa un parametro d per cercare di ottenre un rapporto pixel:texel par a 1:1 o 2:1 (frequenza di Nyquist)
• Se un pixel ingloba più texel si scende di livello
• d individua il livello, la terna (u,v,d) individua il texel, il campione si determina con interpolazione trilineare
![Page 28: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/28.jpg)
Programmazione Grafica aa2007/2008 28
MipMapping
Non mipmapping
mipmapping
![Page 29: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/29.jpg)
Programmazione Grafica aa2007/2008 29
Ripmapping
• Si sottocampiona anche linearmente lungo u e v• Permette di evitare effetti di sfocatura ai bordi• Si crea una struttura ad array, la diagonale
principale contiene la struttura mipmapping, lungo righe e colonne abbiamo le immagini sottocampionate lungo u e v.
• si calcolano valori interpolati usando anche le immagini sottocampionate lungo u e v
![Page 30: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/30.jpg)
Programmazione Grafica aa2007/2008 30
Ripmapping
![Page 31: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/31.jpg)
Programmazione Grafica aa2007/2008 31
Summed area table
• filtro anisotropo - calcola il colore medio in una regione rettangolare nello spazio texture a velocità costante
• si usa un array 2d della stessa dimensione della texture, si usano più bit per maggiore precisione
Ogni elemento nell’array memorizza la somma dei colori di tutti i texel fino all’angolo in basso a sinistra
![Page 32: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/32.jpg)
Programmazione Grafica aa2007/2008 32
Summed area table - 2
• usato per filtrare la texture
pixel
spazio pixel spazio texture
Calcola il BB dell’area del pixel nella texture e usa SAT per calcolare il colore medio dell’area coperta dal BB
x
y
![Page 33: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/33.jpg)
Programmazione Grafica aa2007/2008 33
Summed area table - 3
• Come si calcola la somma dei texel nell’area tra A e B?
RA
BC
D
R’ = SAT[B] – SAT[C] – SAT[D] + SAT[A]
Il valore finale è la media: R’ / (numero texels in R)
![Page 34: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/34.jpg)
Programmazione Grafica aa2007/2008 34
Confronto
Non filtering
Mipmapping
Summed area table
![Page 35: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/35.jpg)
Programmazione Grafica aa2007/2008 35
Texture mapping in OgL
![Page 36: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/36.jpg)
Programmazione Grafica aa2007/2008 36
• Il texturing è fatto durante la rasterizzazione della primitiva
• mappa punti 3D in locazioni (pixel) sul display
• Ciascun frammento generato viene testato per la visibilità (z-buffer) e se visibile viene calcolato lo shading
• Durante l’interpolazione di shading si calcola il valore di texture usando ancora interpolazione tra vertici estremi
![Page 37: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/37.jpg)
Programmazione Grafica aa2007/2008 37
Dichiarazione della texture
Glubyte my_texels [512][512]/* dichiara una immagine di texture
glTexImage2D(GL_TEXTURE_2D,0,components,512,512,0,format,type, my_texels);
/*specifica che l’immagine deve essere una Texturecomponents determina il numero di colori (da 1 a 4)format è determinato dai due parametri successivi
(valori dei pixel e dim immagine)
glEnable(GL_TEXTURE_2D)
![Page 38: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/38.jpg)
Programmazione Grafica aa2007/2008 38
Dichiarazione del modo di mapping
glTexCoord2f(s,t)/* range di variazione delle coordinate dello spaziotexture
La texture viene associata alla primitiva all’atto della dichiarazione:
glBegin(GL_QUAD);glTexCoord2f(0.0, 0.0);glVertex2f(x1, y1, z1);glTexCoord2f(1.0, 0.0);glVertex2f(x2, y2, z2);glTexCoord2f(1.0, 1.0);glVertex2f(x3, y3, z3);
glTexCoord2f(0.0, 1.0);glVertex2f(x4, y4, z4);
glEnd();
![Page 39: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/39.jpg)
Programmazione Grafica aa2007/2008 39
• Posso usare anche un intervallo inferiore di s e t, in tal caso viene mappata solo una parte della texture;
• OgL interpola i valori• Cosa succede se si specificano valori di s e t
esterni all’intervallo 0,1?– Potremmo volere che la texture si ripeta
periodicamente– Oppure vorremmo “clampare” gli estremi ed
estendere 0 ed 1 per i valori inferiori o superiori
glTexParameter(GL_TEXTURE_WRAP_S, GL_REPEAT)/*texture ripetute
glTexParameter(GL_TEXTURE_WRAP_S,GL_CLAMP)/* texture “clampate”
![Page 40: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/40.jpg)
Programmazione Grafica aa2007/2008 40
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST|GL_LINEAR)
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST|GL_LINEAR)
GL_NEAREST adotta nearest neighbourghGL_LINEAR applica un filtro smooth 2x2
Minification, magnification
![Page 41: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/41.jpg)
Programmazione Grafica aa2007/2008 41
mipmapping• OgL permette di creare una serie di
array di texture a risoluzione decrescente
gluBuild2DMipmaps(GL_TEXTURE_2D,3,64,64,GL_RGB,GL_UNSIGNED_BYTE,my_texels)
/* crea le texture 64x64-32x32-16x16-8x8-4x4-2x2-1x1
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST_MIPMAP_NEAREST)
/*invoca l’opzione mipmap
![Page 42: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/42.jpg)
Programmazione Grafica aa2007/2008 42
Modifica del colore
• Il colore può essere modulato (alfa blending) o coperto dalla texture:
glTexEnv(GL_TEX_ENV,GL_TEX_ENV_MODE,GL_MODULATE)
glTexEnv(GL_TEX_ENV,GL_TEX_ENV_MODE,GL_DECAL)
![Page 43: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/43.jpg)
Programmazione Grafica aa2007/2008 43
Bump mapping
![Page 44: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/44.jpg)
Programmazione Grafica aa2007/2008 44
Bump mapping
• Perturbazione della normale
• Funzione di bump d(u,v):
• Meglio perturbare la normale e non il punto
n=pu ×pv
pu ×pv
pu =
∂x∂u∂y∂u∂z∂u
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥
pv =
∂x∂v∂y∂v∂z∂v
⎡
⎣
⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢
⎤
⎦
⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥
p'=p+d(u,v)n
n'=p'u ×p'vdove:
p'u =pu +∂d∂u
n+d(u,v)nu
p'v =pv +∂d∂v
n+d(u,v)nv
![Page 45: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/45.jpg)
Programmazione Grafica aa2007/2008 45
Environmental mapping
Simula riflessioni a specchio senza ray tracing, chiamato anche reflection map
Si calcola la proiezione dell’ambiente su una forma determinata (sfera per oggetti, cubo nel caso di ambienti chiusi)
La proiezione viene trattata come una texture, ma la texture viene proiettata dal punto vista dell’osservatore
![Page 46: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/46.jpg)
Programmazione Grafica aa2007/2008 46
• Il programma applicativo deve calcolare la proiezione dell’ambiente sulla superficie intermedia (sfera o scatola)
• OgL genera automaticamente le coordinate di texture per un mapping sferico
glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP)glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP)glEnable(GL_TEXTURE_GEN_S)glEnable(GL_TEXTURE_GEN_T)
![Page 47: Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.](https://reader036.fdocument.pub/reader036/viewer/2022070313/5542eb6a497959361e8d68e4/html5/thumbnails/47.jpg)
Programmazione Grafica aa2007/2008 47
Nebbia ed effetti di profondità
• Depth cueing• Fog factor f viene trattato come il
coefficiente alfa blending, è approssimato da una funzione del tipo
f =e−0.5z2
GLFloar fcolor[4] = […]glEnable(GL_FOG)glFogf(GL_FOG_MODE,GL_EXP)glFoGf(GL_FOG_DENSITY,0.5)glFogfv(GL_FOG_COLOR, fcolor)