- •Компьютерная графика: лабораторный практикум. Санкт-Петербург
- •Введение
- •1.1. Основные возможности
- •1.2. Интерфейс OpenGl
- •1.3. Архитектура OpenGl
- •1.4. Синтаксис команд
- •1.5. Пример приложения
- •2. Рисование геометрических объектов
- •2.1. Процесс обновления изображения
- •2.2. Вершины и примитивы
- •2.2.1. Положение вершины в пространстве
- •2.2.2. Цвет вершины
- •2.2.3. Нормаль
- •2.2.4..Операторные glBegin / glEnd
- •2.3. Цель, требования и рекомендации к выполнению задания
- •2.4. Задания
- •3. Преобразования объектов
- •3.1. Работа с матрицами
- •3.3. Модельно-Видовые преобразования
- •3.4. Проекции
- •3.5. Область вывода
- •3.6. Цель, требования и рекомендации к выполнению задания
- •3.7. Задания
- •4. Фрактал и фрактальная геометрия
- •4.1. Свойства фракталов
- •4.2. Виды фракталов.
- •4.2.1. Геометрический фрактал
- •4.2.2. Алгебраический фрактал
- •4.2.3. Стохастические фракталы
- •4.3. Способы построения фракталов
- •4.3.2. Система итерирующих функций ifc
- •4.4. Цель, требования и рекомендации к выполнению задания
- •4.5. Задания
- •5. Модели освещения
- •5.1. Геометрические составляющие отраженного света
- •5.2. Диффузная компонента
- •5.3. Зеркальная компонента
- •5.4. Роль фонового света
- •5.5. Комбинирование компонентов освещения
- •5.6. Добавление цвета
- •5.7. Общее уравнение отраженного света
- •5.8. Закраска и графический конвейер
- •5.9. Использование источников света вOpenGl
- •5.9.1. Создание источника света
- •5.9.2. Прожекторы
- •5.9.3. Ослабление света с расстоянием
- •5.9.4. Модель освещения в OpenGl
- •5.9.5. Перемещение источников света
- •5.10. Работа со свойствами материалов в OpenGl
- •5.11. Цель, требования и рекомендации к выполнению задания
- •5.12. Задания
- •6. Отображение отражений и теней.
- •6.1. Отображение отражений
- •6.2. Тени объектов
- •6.2.1. Тени как текстура
- •6.2.2. Построение "спроецированной" грани
- •6.3. Пример реализации “зеркала”.
- •6.3. Цель, требования и рекомендации к выполнению задания
- •6.4. Задания
- •7. Создание приложения
- •Заключение
- •Литература
- •Оглавление
5.9.2. Прожекторы
Как упоминалось ранее, можно заставить позиционный источник света работать в качестве прожектора. Источники света по умолчанию являются точечными источниками. Это означает, что они излучают свет равномерно по всем направлениям. Однако OpenGL позволяет превратить их в прожекторы, так чтобы они излучали свет в ограниченном числе направлений. На рис. показан прожектор, нацеленный в направлении d с углом пропускания ("cutoff angle") - a.
рис. 5.6. Свойства прожектора
Для создания прожектора необходимо определить границы конуса света. В точках, лежащих вне конуса пропускания, свет не виден вообще. Для таких вершин, как Р, которые лежат внутри этого конуса, количество света, достигающего точки Р, пропорционально множителю cosE (b), где b - угол между вектором d и прямой, соединяющий источник с точкой Р. Также необходимо задать направление света прожектора, которое определяет ось конуса света. По умолчанию это направление равно (0,0,-1), то есть свет испускается вдоль отрицательной оси z. В дополнение к направлению и углу прямого выхода излучения для прожектора существуют два способа управления интенсивностью распространения света внутри конуса. Во-первых, можно задать коэффициент затухания, который умножается на интенсивность света. Так же можно установить параметр GL_SPOT_EXPONENT для управления концентрацией света. Интенсивность имеет наивысшее значение в центре конуса. И она затухает по направлению к краям конуса – по косинуса угла, возведенному в степень точечной экспоненты. Показатель степени Е выбирается пользователем так, чтобы обеспечить нужное уменьшение интенсивности света в зависимости от угла.
Параметры прожектора устанавливаются следующим образом: с помощью функции glLightf() задается его единственный параметр, а с помощью функции glLightfv() - вектор:
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,45.0);// угол пропускания - 45
glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,4.0);// значение Е
GLfloat dir[]={2.0,1.0,-4.0};// направление прожектора
glLightfv(Gl_LIGHT0,GL_SPOT_DIRECTION,dir);
По умолчанию установлены следующие значения этих параметров: d=(0,0,-1), a=180, Е=0, что соответствует действующему во всех направлениях точечному источнику света.
5.9.3. Ослабление света с расстоянием
OpenGL также дает возможность задавать скорость ослабевания света при удалении от источника. Хотя было раньше допущено упрощение, что не учитывался этот фактор. В OpenGL предусмотрено ослабление силы позиционного источника света с помощью так называемого коэффициента ослабления:
,
где kc , kl , kq - коэффициенты, а D - расстояние между точкой расположения источника света и рассматриваемой вершиной. Коэффициент ослабления отключен в случае источников направленного света, поскольку они находятся бесконечно далеко. Это выражение является достаточно гибким, чтобы позволить смоделировать любую комбинацию постоянной, линейной и квадратичной зависимости от расстояния до источника. Параметры управляются с помощью вызовов функции
glLightf(GL_LIGHT0,GL_CONSTNT_ATTENUATION,2.0); и подобным же образом дляGL_LINEAR_ATTENUATIONиGL_QUADRATIC_ATTENUATION. Значения по умолчанию составляют kc=1, kl=0, kq=0 , что исключает какое-либо ослабление света.