Урок 8. Освещение:
Как и было обещано в прошлый раз, сегодня мы затронем такую тему, как освещение. Что ж, начнем!
Для того чтобы добавить источник света в нашу сцену используются команды:
void glLight[i f] (GLenum light, GLenum pname, GLfloat param)
void glLight[i f]v (GLenum light, GLenum pname, GLfloat *params)
Если вы заметили, то вторая команда отличается от первой тем, что вместо одного параметра pаram мы указываем на массив значений. Дальше станет яснее.
Параметр light указывает на источник света. То есть, вы можете создавать до 8 источников. Выбрать же нужный можно с помощью спец. имен GL_LIGHTi, где вместо i ставится номер источника. Например, мы создали один источник света, и сейчас хотим его настроить, тогда вместо light пишем слово GL_LIGHT0 (то есть, мы выбрали первый источник). Последние два параметра аналогичны тем, что были в прошлом уроке (для команды glMaterial()). И сейчас мы их рассмотрим. Значение params зависит от значения pname. Ниже представлены все значения pname:
- GL_SPOT_EXPONENT параметр param должен содержать целое или вещественное число от 0 до 128, задающее распределение интенсивности света. Этот параметр описывает уровень сфокусированности источника света. Значение по умолчанию: 0 (рассеянный свет).
- GL_SPOT_CUTOFF параметр param должен содержать целое или вещественное число между 0 и 90 или равное 180, которое определяет максимальный угол разброса света. Значение этого параметра есть половина угла в вершине конусовидного светового потока, создаваемого источником. Значение по умолчанию: 180 (рассеянный свет).
- GL_AMBIENT параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют цвет фонового освещения. Значение по умолчанию: (0.0, 0.0, 0.0, 1.0).
- GL_DIFFUSE параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют цвет диффузного освещения. Значение по умолчанию: (1.0, 1.0, 1.0, 1.0) для LIGHT0 и (0.0, 0.0, 0.0, 1.0) для остальных.
- GL_SPECULAR параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют цвет зеркального отражения. Значение по умолчанию: (1.0, 1.0, 1.0, 1.0) для LIGHT0 и (0.0, 0.0, 0.0, 1.0) для остальных.
- GL_POSITION параметр params должен содержать четыре целых или вещественных, которые определяют положение источника света. Если значение компоненты w равно 0.0, то источник считается бесконечно удаленным и при расчете освещенности учитывается только направление на точку (x,y,z), в противном случае считается, что источник расположен в точке (x,y,z,w). Значение по умолчанию: (0.0, 0.0, 1.0, 0.0).
- GL_SPOT_DIRECTION параметр params должен содержать четыре целых или вещественных числа, которые определяют направление света. Значение по умолчанию: (0.0, 0.0, -1.0, 1.0).
Для использования освещения сначала надо установить соответствующий режим вызовом команды glEnable (GL_LIGHTNING), а затем включить нужный источник командой glEnable (GL_LIGHTi).
Теперь для того, что бы все это как-то закрепить давайте рассмотрим следующий пример:
float light_col = {1.0,1.0,1.0}; // цвет диффузного освещения.
glLightfv(GL_LIGHT0,GL_DIFFUSE,light_col); // установим источник света с настройкой диффузного освещения.
glEnable(GL_LIGHTING); // устанавливаем режим для использования освещения.
glEnable(GL_LIGHT0); // включаем первый источник света.
На этом со светом закончим. Кстати, обратитесь теперь к уроку №6. Я думаю теперь вы по-другому посмотрите на шестой урок (ведь теперь вы полностью должны понять его код, в том числе и освещение! :)
До встречи в следующем уроке!
Alex Salo
Навигация
Назад | Список уроков | Вперед
|