Chcesz dodać mgłę do Twojego programu w OpenGL? W tym tutorialu pokażę Ci, jak to zrobić. Kod tej lekcji jest oparty o kod z lekcji 7
Zaczniemy od ustawienia wszystkich zmiennych potrzebnych do przechowywania informacji o mgle. Zmienna fogMode będzie użyta do przechowywania trzech typów mgły: GL_EXP, GL_EXP2 i GL_LINEAR. Różnice pomiędzy nimi wytłumaczę później. Zmienne umieścimy na początku kodu, za linią GLuint texture[3]. Zmienna fogfilter będzie użyta do przechowania informacji o używanym rodzaju mgły. Zmienna fogColor będzie przechowywać kolor mgły, jaki sobie zażyczymy. Dodatkowo, na początku kodu, dodałem zmienną logiczną gp, która będzie nas w dalszej części tutoriala informować, czy wciśnięty jest klawisz 'g'.
Po zdefiniowaniu naszych zmiennych przechodzimy do InitGL. Linia glClearColor() została zmieniona tak, aby wypełnić ekran tym samym kolorem, co mgła, dla uzyskania lepszego efektu. Mgła nie potrzebuje wiele kodu. Wszystko jest bardzo proste. Ten kod umieść w procedurze DrawGLScene()
Zerknijmy na pierwsze trzy linie z tego kodu. Pierwsza linia (raczej ostatnia - przyp. tłum.) glEnable(GL_FOG); nie wymaga wyjaśnienia. Po prostu inicjalizuje mgłę.
Druga linia, glFogi(GL_FOG_MODE, fogMode[fogfilter]); ustawia tryb filtru mgły. Wcześniej zadeklarowaliśmy tablicę fogMode. Przechowuje ona GL_EXP, GL_EXP2 i GL_LINEAR. Pozwól mi każdą z nich wyjaśnić:
Trzecia linia, glFogfv(GL_FOG_COLOR, fogcolor); ustawia kolor mgły. Wcześniej ustaliliśmy go na (0.5f,0.5f,0.5f,1.0f) używając zmiennej fogcolor, daje nam to ładny szary kolor.
Następnie spójrzmy na ostatnie cztery linie tego kodu. Linia glFogf(GL_FOG_DENSITY, 0.35f); ustala gęstość mgły. Gdy zwiększymy wartość, mgła stanie się gęstsza, zmniejszenie spowoduje, że stanie się rzadsza.
Linia glHint (GL_FOG_HINT, GL_DONT_CARE); ustala sposób tworzenia mgły. Użyłem GL_DONT_CARE, ponieważ mnie to nie obchodzi.
Eric Desrosiers dodał: Małe wyjaśnienie glHint(GL_FOG_HINT, hintval);
hintval może przyjmować wartości: GL_DONT_CARE, GL_NICEST albo GL_FASTEST
Następna linia: glFogf(GL_FOG_START, 1.0f); ustala, jak blisko ekranu powinna zacząć się mgła. Możesz zmieniać tę wartość, kiedy tylko chcesz zmienić położenie mgły. Następna linia jest podobna, glFogf(GL_FOG_END, 5.0f);. Informuje OpenGL, jak daleko od ekranu powinna skończyć się mgła.
Teraz pozostaje nam dodanie reakcji na klawisze, aby móc zmieniać tryby mgły. Ten kod powinien znaleźć się pod koniec programu, czyli tam, gdzie znajduje się obsługa innych klawiszy.
I to wszystko! Skończyliśmy! Teraz masz już mgłę w twoim programie OpenGL. Jak zauważyłeś, nie ma w tym nic trudnego.