- •153000 Г. Иваново, пр. Ф.Энгельса, 21
- •Лекция №1 Предмет и область применения компьютерной графики
- •1. Отображение информации
- •2. Проектирование
- •3. Моделирование
- •4. Графический пользовательский интерфейс
- •Краткая история
- •Технические средства поддержки компьютерной графики
- •Лекция №2 о природе света и цвета
- •Вопросы и упражнения
- •Цветовой график мко
- •Цветовые модели rgb и cmy
- •Цветовые модели hsv и hls
- •Пространство cie Luv
- •Вопросы и упражнения
- •Лекция №3 Геометрические преобразования Системы координат и векторы
- •Уравнения прямой и плоскости
- •Аналитическое представление кривых и поверхностей
- •Пересечение луча с плоскостью и сферой
- •Лекция №3 (продолжение) Интерполяция функций одной и двух переменных
- •Матрицы
- •Геометрические преобразования (перенос, масштабирование, вращение)
- •Переход в другую систему координат
- •Задача вращения относительно произвольной оси
- •Вопросы и упражнения
- •Лекция №4 Введение в растеризацию кривых
- •Изображение отрезка с целочисленными координатами концов
- •Цифровой дифференциальный анализатор
- •Алгоритм Брезенхема
- •Алгоритм Кастла-Питвея
- •Изображение отрезка с нецелочисленными координатами концов
- •Изображение окружностей
- •Алгоритм Брезенхема
- •Изображение эллипсов
- •Построение по неявной функции
- •Построение путем сжатия окружности
- •Лекция №5 Представление геометрической информации Геометрические примитивы
- •Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •Системы координат: мировая, объектная, наблюдателя и экранная
- •Однородные координаты. Задание геометрических преобразований в однородных координатах с помощью матриц
- •Вопросы и упражнения
- •Лекция №6 Отсечение (клиппирование) геометрических примитивов
- •Алгоритм Сазерленда-Коэна отсечения прямоугольной областью
- •Отсечение выпуклым многоугольником
- •Клиппирование многоугольников
- •Вопросы и упражнения
- •Лекция №7 Удаление невидимых поверхностей и линий
- •Удаление нелицевых граней многогранника Алгоритм Робертса
- •Алгоритм Варнока
- •Алгоритм Вейлера-Азертона
- •Метод z-буфера
- •Методы приоритетов (художника, плавающего горизонта)
- •Алгоритмы построчного сканирования для криволинейных поверхностей
- •Метод двоичного разбиения пространства
- •Метод трассировки лучей
- •Вопросы и упражнения
- •Лекция №8 Проецирование пространственных сцен Основные типы проекций
- •Параллельные проекции
- •Центральные проекции
- •Математический аппарат
- •Ортогональные проекции
- •Косоугольные проекции
- •Центральные проекции
- •Специальные картографические проекции. Экзотические проекции земной сферы
- •Стереографическая проекция
- •Гномоническая проекция
- •Ортографическая проекция
- •Проекции на цилиндр
- •Проекция Меркатора
- •Проекции на многогранник
- •Необычные проекции
- •Вопросы и упражнения
- •Лекция 9 Растровое преобразование графических примитивов
- •Алгоритм Брезенхема растровой дискретизации отрезка
- •Алгоритмы Брезенхема растровой дискретизации окружности и эллипса
- •Алгоритмы заполнения областей
- •Вопросы и упражнения
- •Лекция 10 Закрашивание. Рендеринг полигональных моделей
- •Простая модель освещения
- •Закраска граней Плоское закрашивание
- •Закраска методом Гуро
- •Закраска методом Фонга
- •Более сложные модели освещения
- •Устранение ступенчатости (антиэлайзинг)
- •Вопросы и упражнения
- •Лекция 11 Визуализация пространственных реалистических сцен Свето-теневой анализ
- •Метод излучательности
- •Глобальная модель освещения с трассировкой лучей
- •Текстуры
- •Вопросы и упражнения
- •Учебники к курсу
- •Список литературы
Однородные координаты. Задание геометрических преобразований в однородных координатах с помощью матриц
В предыдущей главе описывались
геометрические преобразования на
плоскости и в пространстве, а также было
показано, как можно использовать аппарат
матриц для таких задач. Для преобразований
на плоскости применялись двумерные
векторы и матрицы размерностью
.
В пространстве, соответственно, с этой
же целью использовались трехмерные
векторы и матрицы
.
Но такой подход не позволяет задавать
с помощью матриц преобразования переноса
и проекции. В связи с этим в проективной
геометрии был разработан аппарат,
позволяющий унифицировать все
геометрические преобразования путем
введения так называемых однородных
координат.
Для пояснения такого подхода сначала
рассмотрим случай двумерного пространства.
Каждая точка плоскости с координатами
может
одновременно рассматриваться как точка
трехмерного пространства с координатами
,
т.е. как точка, лежащая на плоскости
.
С другой стороны, каждой точке трехмерного
пространства
при
условии
соответствует
единственная точка этой же плоскости
.
При этом получается, что каждой точке
плоскости
соответствует
прямая, проходящая через начало координат,
т. е. устанавливается взаимно однозначное
соответствие между точками плоскости
и множествами
.
Если теперь рассматривать точку плоскости
как принадлежащую трехмерному
пространству, то ее двумерные
преобразования можно будет описывать
с помощью матриц
,
причем можно будет задавать таким
способом не только повороты и
масштабирование, но и сдвиги и проекции
(как ортографические, так и центральные).
Поворот на угол
относительно
начала координат можно осуществить с
помощью новой матрицы поворота:

Операция масштабирования может быть записана в виде

Перенос на вектор
также
можно задать с помощью матрицы:

Проекции точки на оси координат определяются с помощью матриц проекции:

Перейдем теперь к трехмерному пространству.
Каждой точке
будем
ставить в соответствие точку четырехмерного
пространства
,
а для выполнения основных преобразований
будем использовать матрицы размерностью
.
Строятся они совершенно аналогично
тому, как это делалось в двумерном
случае. Матрица сдвига на вектор
имеет
вид

матрица масштабирования тоже очевидным образом строится из трехмерной матрицы:

Проекции точек на координатные плоскости осуществляются с помощью матриц (более подробно проекции и их виды будут рассмотрены позднее):

Умножение этих матриц на вектор приводит к тому, что обнуляется одна из координат, и в результате получаем проекцию точки на соответствующую плоскость.
Матрица поворота относительно оси
на
угол
выглядит
следующим образом:

Отсюда легко понять, как строятся матрицы поворота относительно других координатных осей, а также матрица поворота относительно произвольной оси. Просто берем матрицы, построенные в третьей главе, и расширяем их путем добавления уже известных единичных вектора-строки и вектора- столбца:

Путем объединения приведенных элементарных преобразований можно построить и более сложные. В третьей главе мы использовали произведение простых матриц вращения для построения матрицы поворота относительно произвольной оси. Приведем один пример.
Пусть в пространстве заданы два отрезка
-
и
.
Будем строить матрицу преобразования,
переводящую первый отрезок во второй.
Это преобразование разложим на следующие
элементарные действия.
-
Сдвиг, перемещающий точку
в
точку
. -
Сдвиг начала координат в эту же точку.
-
Если отрезки неколлинеарны:
-
строится вектор нормали к плоскости, в которой лежат отрезки (для этого можно использовать векторное произведение исходных векторов);
-
поворот относительно вектора нормали, совмещающий два отрезка по направлению (угол поворота можно определить с помощью скалярного произведения исходных векторов).
Масштабирование с целью выравнивания длины отрезков.
Возвращение начала координат в исходную точку.
Каждое из этих преобразований реализуется с помощью матрицы, а полное преобразование можно выполнить, используя произведение матриц.
Использование матриц очень удобно для
выполнения преобразований в пространстве,
хотя в некоторых случаях это приводит
к избыточному числу выполняемых операций.
Например, поворот одной точки в
пространстве относительно координатной
оси
с
помощью матриц в однородных координатах
требует 16 операций умножения и 12 операций
сложения. В то же время он легко может
быть выполнен с помощью формул
преобразования
![]()
т.е. с помощью всего лишь четырех умножений и одного сложения и одного вычитания. Операции сдвига также гораздо более экономично выполнять без использования матриц. Но когда речь идет о суперпозиции многих преобразований (как, например, в случае поворота относительно произвольной оси), то целесообразно применять соответствующую матрицу поворота. Эффективность матричного подхода очень сильно возрастает, если матричные операции реализованы аппаратно. Вопрос о том, в каких случаях использовать матрицы, а в каких нет, во многом зависит от возможностей вычислительной техники, уровня сложности задачи и требований к временным характеристикам процесса визуализации.
