Модель освещенности с использованием источника света и цвета вершины

В этой модели освещенности рассмотрим свойства источников света в 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. Освещение сферы точечным источником света в модели освещенности с использованием источника света и цвета вершины.



php"; ?>