Computer Graphics
Lezione 15:
nebbia nelle scene
Università dell’Insubria
Facoltà di Scienze MFN di Varese
Corso di Laurea in Informatica
Anno Accademico 2005/06
Marco Tarini
Fog
• Idea Base:
– più un punto è lontano dall'occhio
– più lo disegno color – nebbia
• Simula:
– una nebbia uniforme
• (il color nebbia è tipicamente un grigio azzurro chiaro)
– o anche, effetto oscurità
• (se il color nebbia è nero)
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 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
Fog: calcolo dell'opacità
• Dato un punto a distanza z dall'occhio:
– modo lineare:
opacità finale della
nebbia
0=niente nebbia
1=si vede solo nebbia
end  z
fog 
end  start
fine zona
nebbia
inizio zona
nebbia
(costante)
(costante)
densità della
nebbia
(costante)
density  z
– modo esponenziale: fog  e
– modo esponenziale al quadrato:
fog  e
( density  z ) 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 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
Fog: applicazione
• Dopo aver calcolato l'opacità, la applico
colore finale  fog  colore nebbia  (1  fog )  coloreoriginale
il colore della
nebbia
è un'altra
costante
a parole:
"il colore finale e' una interpolazione
fra il colore nebbia e il colore originale"
(l'ennesima interpolazione)
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 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 - 4/40
Fog: dove la computo?
soluzione 1
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
computazioni
per frammento
setup
Colore
(con nebbia)
interpolato
Frammenti
& attributi
interpolati
Il colore
riflette
anche la
nebbia
Vertici poriettati
& attributi
computati
Vertici
computazioni
per vertice
& loro attributi
Computo la
nebbia
(a partire
dalla zeta
proiettata)
Screen
buffer
y
v1
v0
x
v2
v1
v0
z
v2
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 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
setup
rasterizer
punti
setup
rasterizer
triangoli
setup
rasterizer
segmenti
computazioni
per frammento
Vertici poriettati
& attributi
computati
Vertici
computazioni
per vertice
& loro attributi
zeta
proiettata
(spazio
occhio)
Qui ho la zeta
interpolata
(quella che
uso per lo
zeta buffer)
Frammenti
& attributi
interpolati
Fog: dove la computo?
soluzione 2
Qui ho la
Calcolo la
nebbia x ogni
frammento
Screen
buffer
y
v1
v0
x
v2
v1
v0
z
v2
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 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
Fog: dove la computo
• Due soluzioni:
– per vertice
– per frammento
• Dipende dall'implementazione!
– le specifiche di OpenGL non lo prescrivono
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 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
Fog: in OpenGL
• Come al solito: prima l'attivo
glEnable(GL_FOG );
• poi, setto le costanti...
glFogfv(GL_FOG_COLOR, float* );
glFogf(GL_FOG_DENSITY, float );
glFogf(GL_FOG_START, float );
glFogf(GL_FOG_END, float );
glFogi(GL_FOG_MODE, int );
GL_LINEAR
GL_EXP
o
GL_EXP2
• e sono pronto (mando i triangoli)
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 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
Fog
spesso usato nei giochi per mascherare il popping dovuto al clipping contro il FAR PLANE
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 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
Scarica

ppt