Tato lekce rozšiřuje použitím mlhy lekci 7. Naučíte se používat tří různých filtrů, měnit barvu a nastavit oblast působení mlhy (v hloubce). Velmi jednoduchý a "efektní" efekt.
Na začátek programu, za všechna #include, přidáme deklarace nových proměnných. Gp pro zjištění stisku klávesy G, ve filte" najdeme číslo 0 až 2, specifikující právě používaný texturový filtr. V poli fogMode[] ukládáme tři různé typy mlhy. Fogfilter určuje právě používanou mlhu. Ve fogColor je uložena šedá barva.
bool gp;// G stisknuto?
GLuint filter;// Určuje texturový filtr
GLuint fogMode[]= { GL_EXP, GL_EXP2, GL_LINEAR };// Tři typy mlhy
GLuint fogfilter= 0;// Která mlha se používá
GLfloat fogColor[4]= {0.5f, 0.5f, 0.5f, 1.0f};// Barva mlhy
Přesuneme se do funkce InitGL(). glClearColor(r,g,b,a) jsme vždy používali pro nastavení černého pozadí. Tentokrát uděláme malou změnu - použijeme šedé pozadí (barvu mlhy), protože vypadá lépe.
// Funkce InitGL()
glClearColor(0.5f,0.5f,0.5f,1.0f);// Šedá barva pozadí (stejná, jako má mlha)
Příkaz glFogi(GL_FOG_MODE, fogMode[fogfilter]) vybere typ filtru. Pro nás bude zatím nejjednodušší všechny možnosti vložit do pole a pak je voláním použít. Co tedy znamenají: GL_EXP - základní renderovaná mlha, která zahalí celou obrazovku; neposkytuje zrovna perfektní výsledek, ale odvádí slušnou práci na starších počítačích. GL_EXP2 - další vývojový krok GL_EXP; opět zamlží celý monitor, ale tentokrát do větší hloubky. GL_LINEAR - nejlepší renderovací mód; objekty se mnohem lépe ztrácejí a vynořují
glFogi(GL_FOG_MODE, fogMode[fogfilter]);// Mód mlhy
glFogfv(GL_FOG_COLOR, fogColor);// Barva mlhy
glFogf(GL_FOG_DENSITY, 0.35f);// Hustota mlhy
O kvalitu mlhy se starat nebudeme, nicméně lze také použít GL_NICEST nebo GL_FASTEST. Nebudu je dále rozebírat - názvy mluví sami za sebe.
glHint(GL_FOG_HINT, GL_DONT_CARE);// Kvalita mlhy
glFogf(GL_FOG_START, 1.0f);// Začátek mlhy - v hloubce (osa z)
glFogf(GL_FOG_END, 5.0f);// Konec mlhy - v hloubce (osa z)
glEnable(GL_FOG);// Zapne mlhu
Ošetříme stisk klávesy 'G', kterou můžeme při běhu cyklovat mezi různými módy mlhy.
// Funkce WinMain()
if(keys['G'] && !gp)// Je stisknuto 'G'?
{
gp=TRUE;
fogfilter+=1;// Inkrementace fogfilter
if(fogfilter>2)// Hlídá přetečení
{
fogfilter=0;
}
glFogi (GL_FOG_MODE, fogMode[fogfilter]);// Nastavení módu mlhy
}
if(!keys['G'])// Bylo uvolněno 'G'?
{
gp=FALSE;
}
Hodně zajímavý, ale především totálně jednoduchý efekt. Celkem bezbolestně jsme se naučili používat mlhu v OpenGL programech.
napsal: Christopher Aliotta - Precursor <chris (zavináč) incinerated.com>
přeložil: Michal Turek - Woq <WOQ (zavináč) seznam.cz>