Mlha v OpenGL
Často můžete v OpenGL potřebovat zahalit předměty do mlhy, ve článku se dozvíte jak tohoto efektu dosáhnout.
Ať už se snažíte vytvořit hororovou hru, tajemný maják, kuřáka zahaleného dýmem nebo město skryté ve smogu, bude se vám určitě hodit tato vymoženost. Není určena jen pro výše zmíněné případy, ale jistě mi dáte za pravdu, že právě pro ně je to jako na-míru-šitý oblek.
Ze začátku názorná ukázka:
Pro nastavování vlastností či parametrů mlhy se používá příkaz (funkce)
1 |
glFog{fi}[v] (GLenum type, hodnota); |
Nyní si postupně probereme různé hodnoty parametru GLenum type a jeho k tomu příslušné možné hodnoty.
Začneme s GL_FOG_DENSITY, který je jeden z nejdůležitějších. Nastavuje se s ním hustota mlhy. K němu jsou příslušné hodnoty z intervalu <0.0, 1.0>. Viz. příklady:
|
|
|
Density = 0.1 | Density = 0.2 | Density = 0.5 |
Dále je zde GL_FOG_MODE. Tímto nastavujeme mód přechodu mlhy. K němu přísluší hodnoty:
- GL_LINEAR … postupný, lineární přechod, k němu musíme nastavit ještě začátek a konec, viz níže.
- GL_EXP … exponenciální přechod
- GL_EXP2 … exponenciální přechod umocněn ještě na druhou.
|
|
|
GL_LINEAR (start = 1.0, end = 5.0) |
EXP | EXP2 |
Následuje jistě potřebná vlastnost, a tou je barva. Pro ni je zde typ GL_FOG_GOLOR. Zřejmě jej budete používat ve vazbě glFogfv – float a pole. Určitě jde vidět na obrázku rozdíl:
|
|
R = 0.5 G = 0.5 B = 1.0 |
R = 0.5 G = 0.5 B = 0.5 |
Při použití GL_LINEAR nesmíme zapomenout nastavit začátek a konec lineárního přechodu mlhy. Defaultně je nastaven na hodnoty: Start = 0.0, End = 1.0.
Pomocí GLenum typů GL_FOG_START a GL_FOG_END nastavíme tedy začátek a konec přechodu – je brána vzdálenost od kamery.
|
|
Start = 0.0 End = 5.0 |
Start = 0.0 End = 2.0 |
Nakonec už nezbývá jen než povolit mlhu příkazem glEnable (GL_FOG). To znamená, že ji zase můžeme kdykoliv vypnout pomocí glDisable (GL_FOG).