© 2013 All rights reserved.
0

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:



mlha

Pro nastavování vlastností či parametrů mlhy se používá příkaz (funkce)

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:


mlha

mlha

mlha
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.

mlha

mlha

mlha

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:


mlha

mlha
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.


mlha

mlha
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).

Comments are closed for this page

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836