CZ NeHe OpenGL
Lekce 16

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áč) email.cz>

Zdrojové kódy

Lekce 16

<<< Lekce 15 | Lekce 17 >>>


Tento offline překladů NeHe OpenGL Tutoriálů lze volně šířit podle Obecné veřejné licence GNU Nové okno, jeho nejnovější verze je dostupná na domovském webu projektu CZ NeHe OpenGL Nové okno.

Michal Turek - Woq <WOQ (zavináč) email.cz> (24.02.2004).