В этой модели освещенности рассмотрим свойства источников света в OpenGL. Система OpenGL версии 1 поддерживает всего 8 или менее одновременно действующих источников света. В общем случае для выяснения максимально разрешенного количества источников света используем функцию glGetIntegerv(GL_MAX_LIGHTS, @num), где num – целочисленная переменная, в которую запишется результат - количество источников света.
Источники света задаются именованными константами вида GL_LIGHTх,где вместо х подставляется номер источника, начиная с нулевого. Например, включение первого источника минимально достигается вызовом двух команд:
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
Источник света в OpenGL состоит из нескольких цветовых составляющих: рассеянный свет – Ambient, диффузный – Diffuse, зеркальный – Specular. Хотя кажется что это противоречит здравому смыслу, но в OpenGL вполне можно настроить источник света так, например, чтобы он “светил” красной рассеянной составляющей, зеленой диффузной составляющей и синей зеркальной. В результате можно получить очень интересные визуальные эффекты. Рассмотрим фрагмент программы настройки компонент источника света с помощью векторной версии функции glLight:
var
//параметры источника света
ambient: array[1..4]of GLfloat = (0.7, 0.9, 0.9, 1.0);
diffuse: array[1..4]of GLfloat = (1.0, 1.0, 1.0, 1.0);
specular: array[1..4]of GLfloat = (1.0, 1.0, 1.0, 1.0);
begin
...
glLightfv(GL_LIGHT0, GL_AMBIENT, @ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, @diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, @Specular);
Функция glLight может использоваться и для установок некоторых других параметров источника света.
В качестве значений цветовых составляющих используются четырехкомпонентные массивы RGBA. Первый вызов glLight в нашем примере задает цвет рассеянной составляющей. Если не указывать ее явно, то по умолчанию система считает что рассеянный свет отсутствует: (0.0, 0.0, 0.0,1.0).
Второй вызов устанавливает диффузную составляющую, которая для нулевого источника по умолчанию равняется белому цвету (1.0, 1.0, 1.0, 1.0), а для остальных – черному, т.е. отсутствует: (0.0, 0.0, 0.0, 1.0). Третий вызов glLightfv с параметром GL_SPECULAR определяет зеркальную составляющую. По умолчанию интенсивность зеркальной составляющей для нулевого источника равняется (1.0, 1.0, 1.0, 1.0), а для остальных (0.0, 0.0, 0.0,1.0).
Другие параметры функции glLight позволяют настраивать такие характеристики источника света как его направленность, положение в пространстве, формулу ослабления интенсивности в зависимости от удаления от поверхности, распределение светового пятна. По умолчанию создается точечный источник с равномерным распределением интенсивности, без ослабления в зависимости от удаленности.
Как видно из рис. 44, на модель освещенности с использованием источника света и цвета вершины также влияют установки смешения цветов, рассмотренные выше.
На рис. 46 показан пример освещения сферы точечным источником света в модели освещенности с использованием источника света и цвета вершины.
Рис. 266. Освещение сферы точечным источником света в модели освещенности с использованием источника света и цвета вершины. |