Можно также разложить источник света на различные цвета. OpenGL позволяет присвоить различный цвет каждому из трех типов света, испускаемого источником: фоновому, диффузному и зеркальному. Может показаться странным, что источник испускает фоновый свет. Однако этот тип освещения по-прежнему рассматривается как в равенстве (8.7): глобальный всенаправленный свет, полностью заливающий сцену. Преимущество привязки фонового света к источнику заключается в том, что его можно включать и выключать во время работы приложения. (Кроме этого, OpenGL снабжен истинно фоновым
1 Здесь и всюду тип данных f 1 oat будет, вероятно, работать не хуже, чем тип GLf 1 oat. Однако использование типа GLf 1 oat сделает ваш код более совместимым с другими программными средами OpenGL.
8.2. Введение в модели закрашивания светом, не связанным ни с каким источником, однако его мы рассмотрим позднее, в связи с «моделями освещения».)
С помощью приведенного ниже кода определяются массивы для хранения цветов, испускаемых источниками света. Эти массивы затем передаются в функцию glLightfvO:
GLfloat ambO[] - {0.2. 0.4. 0.6. 1.0}:
// define some colors
// определяем некоторые цвета
GLfloat diffOH - {0.8. 0.9. 0.5. 1.0}:
GLfloat spec0[] - {1.0. 0.8. 1.0. 1.0}:
g1Lightfv(GL_LIGHT0. GL_AMBIENT, ambO);
// attach them to LIGHT0
// привязываем их к LIGHTO
glLightfv(GL_LIGHT0, GLJIFFUSE. diffO):
g1Lightfv(GL_LIGHT0. GL_SPECULAR. specO);
Цвета задаются в так называемом формате RGBA, что означает: Red (красный), Green (зеленый), Blue (синий) и «Alpha» (альфа). Величина alpha иногда используется для смешения двух цветов на экране; это будет рассматриваться в главе 10. Для наших целей здесь alpha = 1,0.
Источники света имеют различные значения по умолчанию.
Для всех источников:
default ambient - (0, 0, 0, 1); фоновый по умолчанию, (dimmest possible = black); наименьшая яркость - черный.
Для источника света LIGHTO:
* default diffuse = (1, 1, 1, 1) диффузный по умолчанию, (brightest possible - white) наибольшая яркость - белый