Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione 15: nebbia nelle scene
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 2/40 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 S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 3/40 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 S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 4/40 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 S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 5/40 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 S i s t e m i M u l t i m e d i a l i I I / 0 5 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? 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 S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 7/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 S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 8/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 GL_EXP2 o e sono pronto (mando i triangoli)
M a r c o T a r i n i S i s t e m i M u l t i m e d i a l i I I / 0 5 U n i v e r s i t à d e l l I n s u b r i a - 9/40 Fog spesso usato nei giochi per mascherare il popping dovuto al clipping contro il FAR PLANE