НАПРАВЛЕННЫЕ ИСТОЧНИКИ СВЕТА (ПРОЖЕКТОРЫ) OpenGL
Для локальных источников света (тех, которые расположены не на бесконечности) можно также задать эффект направленного освещения. Это ограничивает свет, излучаемый источником, конусообразной областью пространства. Определим коническую область вектором направления вдоль оси конуса и угловым отклонением ві от оси конуса, как показано на рис. 10.113. Кроме того, для источника света можно задать показатель углового затухания щ, определяющий, насколько уменьшается интенсивность света при удалении от центра конуса к его поверхности. Вдоль любого направления в конусе вычисляется коэффициент углового затухания cos“' а (уравнение (10.5)), где cos а вычисляется через скалярное произведение вектора оси конуса и вектора - направления на объект. Значения фоновой, диффузной и зеркальной составляющей цвета света при угле а вычисляются умножением компонентов интенсивности на данный коэффициент углового затухания. Если a > б/, объект находится вне конуса источника света, и объект данным источником не освещается. Для лучей света, расположенных внутри конуса, также можно ввести радиальное затухание интенсивности.
В OpenGL существует три константы свойств для создания направленных эффектов: GL_SPOT_ DIRECTION, GL_SPOT_CUTOFF и GL_SPOT_EXPONENT. Направление света задается вектором в глобальных координатах, компоненты которого - целые числа и величины с плавающей запятой. Угол конуса 0/ задается в градусах как целое число или величина с плавающей запятой, и этот угол может быть равен 180° или любым значениям от 0° до 90°. Если угол конуса равен 180°, источник света излучает во всех направлениях (360°). Значение параметра затухания интенсивности задается в форме целого числа или величины с плавающей запятой из диапазона 0-128. Приведенные ниже команды задают направленные эффекты для источника света 3, так что ось конуса идет по положительному направлению оси х, угол конуса в[ равен 30°, а параметр затухания равен 2,5.
GLfloat dirVector [ ] = {1.0, 0.0, 0.0};
glLightfv (GL_LIGHT3, GL_SPOT_DIRECTION, dirVector);
glLightf (GL_LIGHT3, GL_SPOT_CUTOFF, 30.0);
glLightf (GL_LIGHT3, GL_SPOT_EXPONENT, 2.5); Если направление излучения для источника света не задается, по умолчанию считается, что свет распространяется параллельно отрицательному направлению оси z; т.е. (0.0, 0.0, -1.0). Кроме того, по умолчанию угол конуса равен 180°, и коэффициент затухания - 0. Таким образом, по умолчанию используется точечный источник света, излучающий во всех направлениях без углового затухания.
ПАРАМЕТРЫ ГЛОБАЛЬНОГО ОСВЕЩЕНИЯ OpenGL
Некоторые параметры освещения OpenGL можно задать на глобальном уровне. Данные значения используются для контроля за ходом некоторых расчетов освещения, и значение глобального параметра можно задать с помощью следующей функции.
glLightModel* (paramName, paramValue); В зависимости от типа значения параметра добавляется код суффикса i или f. Кроме того, для векторных данных также прибавляется код суффикса v. Параметру paramName присваивается символьная константа OpenGL, идентифицирующая устанавливаемое глобальное свойство, а параметру paramValue присваивается одно значение или набор значений. Используя функцию glLightModel, можно задать глобальный уровень фонового освещения, указать, как следует вычислить зеркальные “зайчики”, или применить модель освещения к невидимым граням многоугольной поверхности.