Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione 15: nebbia nelle scene
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 / 0 7 U n i v e r s i t à d e l l I n s u b r i a Fog Idea Base: –più un punto è lontano dall'occhio –più il suo colore è "nebbia" Simula: –nebbia uniforme (colore nebbia tipico = grigio-azzurro chiaro) detto anche "partecipating media" –o anche (ma assai meno propriamente) effetto oscurità (colore nebbia tipico = 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 / 0 7 U n i v e r s i t à d e l l I n s u b r i a Dato un punto a distanza z dall'occhio: –modo lineare: –modo esponenziale: –modo esponenziale al quadrato: Fog: calcolo dell'opacità fine zona nebbia (costante) inizio zona nebbia (costante) opacità finale della nebbia 0=niente nebbia 1=si vede solo nebbia densità della nebbia (costante)
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 / 0 7 U n i v e r s i t à d e l l I n s u b r i a Fog: applicazione Dopo aver calcolato l'opacità, la applico a parole: "il colore finale e' una interpolazione fra il colore nebbia e il colore originale" (l'ennesima interpolazione) il colore della nebbia è un'altra costante
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 / 0 7 U n i v e r s i t à d e l l I n s u b r i a Fog: dove la computo? soluzione 1 Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up x y z v0v0 v1v1 v2v2 v0v0 v1v1 v2v2 computazioni per frammento Colore (con nebbia) interpolato Il colore riflette anche la nebbia Computo la nebbia (a partire dalla zeta proiettata) computazioni per 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 / 0 7 U n i v e r s i t à d e l l I n s u b r i a Fog: dove la computo? soluzione 2 Frammenti & attributi interpolati Vertici & loro attributi Screen buffer Vertici poriettati & attributi computati rasterizer triangoli set- up rasterizer segmenti set- up rasterizer punti set- up x y z v0v0 v1v1 v2v2 v0v0 v1v1 v2v2 Qui ho la zeta interpolata (quella che uso per lo zeta buffer) Qui ho la zeta proiettata (spazio occhio) computazioni per vertice Calcolo la nebbia x ogni frammento computazioni per frammento
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 / 0 7 U n i v e r s i t à d e l l I n s u b r i a 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 / 0 7 U n i v e r s i t à d e l l I n s u b r i a 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 GL_EXP2 o 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 / 0 7 U n i v e r s i t à d e l l I n s u b r i a 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 / 0 7 U n i v e r s i t à d e l l I n s u b r i a Utilizzi - come strumento per: –x incrementare la chiarezza delle immagini capisco cosa e' piu' lontano –x nascondere il popping dovuto a far plane clipping gli oggetti compariranno con gradualita' usare: colore nebbia == colore sfondo! senza:con: