- •Часть II. Основы программирования
- •Введение
- •Лекция 1. Библиотека OpenGl
- •1. Назначение библиотеки OpenGl
- •2. Основные возможности OpenGl
- •3. Макет консольного приложения, использующего библиотеку glaux
- •Программа 1.1
- •4. Имена функций OpenGl
- •5. Системы координат
- •5.1 Матрицы преобразований
- •5.2 Видовые и модельные преобразования
- •5.3 Проекционное преобразование
- •5.4 Оконное преобразование
- •6. Пример выполнения модельных преобразований
- •6.1 Параллельный перенос
- •Фрагмент программы 1.2
- •6.2 Поворот
- •Фрагмент программы 1.3
- •7. Сводка результатов
- •8. Упражнения Упражнение 1
- •Упражнение 2
- •Упражнение 3
- •Упражнение 4
- •Упражнение 5
- •Упражнение 6
- •Лекция 2. Генерация движущихся изображений
- •1. Анимация с двойной буферизацией
- •2. Обработка событий клавиатуры и мыши
- •2.1 Пример обработки события от мыши: изменение цвета вращающегося объекта по нажатию левой кнопки мыши
- •3. Композиция нескольких преобразований
- •3.1 Модель солнечной системы
- •3.2 Модель манипулятора робота
- •4. Сводка результатов
- •5. Упражнения Упражнение 1
- •Упражнение 2
- •Упражнение 3
- •Упражнение 4
- •Упражнение 5
- •Лекция 3. Геометрические примитивы
- •1. Служебные графические операции
- •1.1 Очистка окна
- •1.2 Задание цвета
- •1.3 Удаление невидимых поверхностей
- •2. Описание точек, отрезков и многоугольников
- •2.1 Точки
- •2.2 Отрезки
- •2.3 Многоугольники
- •2.4 Прямоугольники
- •2.5 Кривые
- •2.6 Задание вершин
- •2.7 Геометрические примитивы OpenGl
- •3. Свойства точек, отрезков и многоугольников
- •3.1 Точки
- •3.2 Отрезки
- •3.3 Многоугольники
- •4. Сводка результатов
- •Лекция 4. Полигональная аппроксимация поверхностей
- •1. Векторы нормали
- •2. Некоторые рекомендации по построению полигональных аппроксимаций поверхностей
- •3. Пример: построение икосаэдра
- •3.1 Вычисление нормалей к граням икосаэдра
- •3.2 Повышение точности аппроксимации сферической поверхности
- •3.3 Алгоритм разбиения треугольной грани произвольной поверхности
- •4. Плоскости отсечения
- •6. Сводка результатов
- •7. Упражнения Упражнение 1
- •Упражнение 2
- •Упражнение 3
- •Упражнение 4
- •Лекция 5. Цвет и освещение
- •1. Цветовая модель rgb
- •2. Задание способа закраски
- •3. Освещение
- •4. Освещение в реальном мире и в OpenGl
- •4.1 Излучаемый, рассеянный, диффузно отраженный и зеркально отраженный свет
- •4.2 Цвет материала
- •4.3 Значения rgb для источников света и материалов
- •5. Пример: рисование освещенной сферы
- •5.1 Вектора нормали в вершинах объектов
- •5.2 Создание, расположение и включение источников света
- •5.3 Выбор модели освещения
- •5.4 Задание свойств материалов для объектов сцены
- •6. Создание источников света
- •6.1 Цвет
- •6.2 Местоположение и затухание
- •6.3 Прожекторы
- •6.4 Использование нескольких источников света
- •6.5 Изменение местоположения источников света
- •4. Сводка результатов
- •Лекция 6. Свойства материала и спецэффекты освещения
- •1. Задание свойств материала
- •1.1 Диффузное и рассеянное отражение
- •1.2 Зеркальное отражение
- •1.3 Излучаемый свет
- •1.4 Изменение свойств материала
- •1.5 Имитация реальных материалов
- •2. Смешение цветов и прозрачность
- •2.1 Множители source (исходный пиксел) и destination (результирующего пиксела)
- •2.2 Области применения смешения цветов
- •2.3 Пример использования смешения цветов
- •3. Туман
- •3.1 Использование тумана
- •4. Сводка результатов
- •5. Упражнения Упражнение 1
- •2. Назначение текстур
- •3. Создание текстуры в оперативной памяти
- •4. Автоматическое повторение текстуры на плоском многоугольнике
- •5. Наложение текстуры на произвольную поверхность
- •6. Сводка результатов
- •7. Упражнения Упражнение 1
- •Упражнение 2
- •Задание 1.1
- •2. Объемный "тетрис"
- •Задание 2.1
4.1 Излучаемый, рассеянный, диффузно отраженный и зеркально отраженный свет
Излучаемый свет объяснить проще остальных компонент – этот свет излучается объектом и не зависит от других источников света.
Рассеянная компонента – это та часть света источника, которая будет рассеяна в пространстве так, что его первоначальное направление будет невозможно определить. Рассеянный свет выглядит приходящим со всех направлений. Фоновое освещение в комнате всегда имеет большую рассеянную компоненту, поскольку большая часть света попадает в глаз после многократных отражений от разных объектов. Точечные уличные источники света имеют малую рассеянную компоненту, у них большая часть света распространяется по избранному направлению. Когда рассеянный свет падает на поверхность, то он отражается равномерно по всем направлениям.
Диффузный свет распространяется по избранному направлению, так что он выглядит ярче при падении перпендикулярно поверхности, а не под некоторым углом. При падении на поверхность диффузный свет отражается равномерно по всем направлениям, поэтому его вид не зависит от позиции наблюдателя. Вероятно, любой свет, исходящий из заданной точки или направления, имеет диффузную компоненту.
Зеркальный свет распространяется по избранному направлению и отражается от поверхности тоже по некоторому определенному направлению. Лазерный луч, падающий на высококачественное зеркало, характеризуется практически 100-процентным зеркальным отражением. Большая зеркальная компонента у блестящих металлов и пластиков, а у мела и ковра она практически отсутствует. Зеркальную компоненту можно представить себе как блеск поверхности.
Хотя источник света излучает свет, имеющий некоторое определенное распределение по частотам, но рассеянная, диффузная и зеркальная компоненты могут быть различными. Например, если у вас в комнате с красными стенами есть белый источник света, то рассеянный свет будет больше красным, хотя падающий на объекты свет белый. OpenGL позволяет независимо задавать значения красной, зеленой и синей компонент света.
4.2 Цвет материала
Цвет материала, из которого "сделан" объект, в OpenGL описывается количеством отраженного красного, зеленого и синего света. Например, идеально красный мяч отражает весь падающий красный свет и полностью поглощает зеленый и синий. В белом свете (он состоит из равного количества красного, зеленого и синего) этот мяч будет выглядеть красным. В чистом красном свете мяч тоже будет красным. Но если осветить мяч чистым зеленым или синим светом, то он будет выглядеть черным.
Материалы, как и источники света, характеризуются тремя компонентами света: рассеянной, диффузной и зеркальной. Значения компонент задаются как доли отраженных компонент света, падающего на поверхность из этого материала.
Компонента рассеянного отражения материала комбинируется с рассеянной компонентой падающего на объект света от каждого источника. Диффузная и зеркальная компоненты материала аналогично комбинируются с соответствующими компонентами источников света. Видимый цвет материала в основном зависит от свойств рассеянного и диффузного отражения. Обычно эти компоненты материала одинаковы или примерно равны. Зеркальная компонента материала обычно задается белой или серой, так что цвет зеркальных бликов совпадает с цветом зеркальной компоненты источника света. Например, если освещать блестящую красную пластиковую сферу белым светом, то большая часть сферы будет выглядеть красной, а блестящий блик – белым.
