Народный учебник по OpenGL


Урок 16 по OpenGL. Эффект тумана на OpenGL - часть 2


glFogfv(GL_FOG_COLOR, fogColor);        // Устанавливаем цвет тумана

glFogf(GL_FOG_DENSITY, 0.35f);          // Насколько густым будет туман

glHint(GL_FOG_HINT, GL_DONT_CARE);      // Вспомогательная установка тумана

glFogf(GL_FOG_START, 1.0f);             // Глубина, с которой начинается туман

glFogf(GL_FOG_END, 5.0f);               // Глубина, где туман заканчивается.

Возьмем сначала первые три строчки этого кода. Первая строка glEnable(GL_FOG) во многом говорит сама за себя. Ее задача - инициализировать туман.

 

Вторая строка, glFogi(GL_FOG_MODE, fogMode[fogfilter]) устанавливает режим фильтрации тумана. Ранее мы объявили массив fogMode. Он содержал GL_EXP, GL_EXP2 и GL_LINEAR. Именно здесь эти переменные входят в игру. Вот что каждая из них значит:

 

  • GL_EXP - Обычный туман, заполняющий весь экран. Во многом он напоминает туман отдаленно, но легко справляется со своей работой даже на старых PC.
  • GL_EXP2 - Это следующий шаг после GL_EXP. Затуманит весь экран, за то придает больше глубины всей сцене.
  • GL_LINEAR - Это лучший режим прорисовки тумана. Объекты выходят из тумана и исчезают в нем гораздо лучше.

 

Третья, glFogfv(GL_FOG_COLOR, fogcolor) задает цвет тумана. Раньше мы задали его как (0.5f,0.5f,0.5f,1.0f) через переменную fogcolor - получился приятный серый цвет.

 

Дальше, посмотрим на четыре последних строки. Строка glFogf(GL_FOG_DENSITY, 0.35f) устанавливает, насколько густым будет туман. Увеличьте число, и туман станет более густым, уменьшите - менее густым.

 

Eric Desrosiers добавляет небольшое объяснение glHint(GL_FOG_HINT, hintval):

 

hintval может быть: GL_DONT_CARE, GL_NICEST или GL_FASTEST


  • GL_DONT_CARE - позволяет OpenGL выбрать формулу для расчета тумана (по вершинам или по пикселям).
  • GL_NICEST - Создает туман по пикселям (хорошо смотрится).
  • GL_FASTEST - Вычисляет туман по вершинам (быстрее, но не так красиво)) .

 

Следующая строка glFogf(GL_FOG_START, 1.0f) устанавливает насколько близко к экрану начинается затуманивание. Вы можете изменить это число на что угодно, в зависимости от того, где бы Вы хотели, чтобы начался туман. Следующая, похожая, строка glFogf(GL_FOG_END, 5.0f) сообщает программе OpenGL насколько глубоко в экран должен уходить туман.




Начало  Назад  Вперед



Книжный магазин