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 "filter" 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
p°elo₧il: Michal Turek - Woq

ZdrojovΘ k≤dy

Lekce 16

<<< Lekce 15 | Lekce 17 >>>