Lekce 16 - Mlha

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>

Zdrojové kódy

Lekce 16

<<< Lekce 15 | Lekce 17 >>>