Цвет каждой компоненты света задаются RGBA значениями. В сцене могут присутствовать несколько источников света, максимальное количество которых зависит от конкретной реализации OpenGL. Если в сцене два источника света, имеющие цвет света
(R1,G1,B1) и (R2,G2,B2) соответственно, то результирующий цвет будет (R1+ R2,G1+ G2,B1+ В2).
Устанавливая нужные значения всех параметров, можно создать источник света любого типа.
Для ускорения отображения сцены с несколькими источниками света желательно включать каждый из них только, если он необходим при отображении выводимой модели.
В качестве главного освещаемого объекта в OpenGL выступает вершина. Вид остальных примитивов (как линии и многоугольники) зависит от свойств каждой вершины, их составляющей. Как и в реальном мире, к вершине применимо понятие материал. Первые три свойства материала определяют отражающую способность соответствующего падающего света. Если цвет фонового света (LR, LG, LB) и значение отражающей способности фонового света материала (MR, MG, MB), то результирующий цвет будет равен (LR*MR, LG*MG, LB*MB). Аналогичная формула применяется к рассеянному и зеркальному свету. Эффект от назначенных свойств материала проявляется только при включенном освещении. Дополнительно материалу можно задать цвет излучаемого света, который добавляет интенсивности вершине. Этот свет не влияет на общее освещение сцены.
Нормаль вершины задает ориентацию вершины относительно источника света. По умолчанию, для нормали используется вектор (0,0,1). Длина нормали определяет, как много света получает вершина от каждого источника. В OpenGL есть возможность использовать автоматическое приведение нормалей к единичной длине.
Одна из проблем ранних версий OpenGL была в том, что цвет зеркального отражения вычислялся до наложения текстуры, что приводило к затемнению блика. Но в реальной жизни существует множество объектов, цвет блика которых больше зависит от цвета падающего света, а не от свойств поверхности. Например, освещенный белым цветом черный бильярдный шар должен иметь белый блик. Эта проблема решалась через карты освещения (light map) или многократным выводом объекта с различными параметрами. В последних версиях OpenGL или через расширение EXT_separate_specular_color доступно новое состояние. В этом случае цвет фонового, рассеянного и излучаемого света называется первичным цветом, а цвет зеркального света - вторичным цветом. После вызова glEnable(GL_SEPARATE_SPECULAR_COLOR) лишь первичный цвет изменяется от свойств текстуры, а вторичный цвет добавляется после наложения текстуры. В последней версии OpenGL или через расширение EXT_secondary_color можно напрямую управлять вторичным цветом через функцию
gISecondaryColor. Ее можно применять даже при отключенном освещении как дополнительный атрибут вершины.
Список функций для работы с освещением: gILight - конфигурация источника света; gILightModel - установка модели освещения; glMaterial - установка свойств материала; gIColorMaterial - установка текущего цвета как одно из свойств материала.