- •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 Визуализация пространственных реалистических сцен Свето-теневой анализ
- •Метод излучательности
- •Глобальная модель освещения с трассировкой лучей
- •Текстуры
- •Вопросы и упражнения
- •Учебники к курсу
- •Список литературы
Изображение эллипсов
Прежде всего отметим, что у эллипса, в отличие от окружности, всего 2 оси симметрии, поэтому по точкам придется строить уже 2 октанта (см. рис. 4.11).
Рис. 4.11. Изображение эллипса
Построение по неявной функции
Будем рассуждать подобно алгоритму Брезенхема для окружностей.
Неявная функция, задающая эллипс, имеет вид
Введем f(x, y) = b2x2 + a2y2 - a2b2.
Аналогично алгоритму для окружности можно сравнивать f для двух возможных вариантов. Подробный вывод оставляем читателю в качестве упражнения.
Построение путем сжатия окружности
Воспользуемся тем, что эллипс с параметрами a, b (пусть a > b) получается из окружности радиуса a сжатием по оси y в a/b раз. Построим алгоритм, который является некой комбинацией алгоритмов Брезенхема для окружности и для отрезка (см. рис. 4.12).
Рис. 4.12. Построение эллипса путем сжатия окружности
Рис. 4.13. Смешанная связность
Начнем из точки (a, 0) на окружности и из точки (0, 0) на отрезке. Будем строить эллипс точно так же, как окружность, но смещать текущую точку по y только в том случае, когда такое смещение происходит в текущем шаге уже для отрезка, т.е. построение отрезка как раз и является реализацией сжатия в a/b раз (точнее, его дискретной аппроксимацией). Этот алгоритм тоже имеет недостаток: возможная смешанная связность полученной линии (см. рис. 4.13).
Лекция №5 Представление геометрической информации Геометрические примитивы
Под геометрическими примитивами понимают тот базовый набор геометрических фигур, который лежит в основе всех графических построений, причем эти фигуры должны образовывать "базис" в том смысле, что ни один из этих объектов нельзя построить через другие. Однако вопрос о том, что включать в набор геометрических примитивов, нельзя считать окончательно решенным в компьютерной графике. Например, количество примитивов можно свести к некоему минимуму, без которого нельзя обойтись, и этот минимум сводится к аппаратно реализованным графическим объектам. В этом случае базисный набор ограничивается отрезком, многоугольником и набором литер (символов).
Другая точка зрения состоит в том, что в набор примитивов необходимо включить гладкие кривые различного рода (окружности, эллипсы, кривые Безье), некоторые классы поверхностей и даже сплошные геометрические тела. В качестве трехмерных геометрических примитивов в таком случае предлагаются пространственные кривые, параллелепипеды, пирамиды, эллипсоиды. Но если такой расширенный набор примитивов связан с аппаратной реализацией, то возникает проблема перенесения программных приложений с одного компьютера на другой, поскольку такая аппаратная поддержка существует далеко не на всех графических станциях. Кроме того, при создании трехмерных геометрических примитивов программисты сталкиваются с проблемой их математического описания, а также разработки методов манипулирования такими объектами, поскольку те типы объектов, которые не попали в список базовых, надо уметь приближать с помощью этих примитивов.
Во многих случаях для аппроксимации сложных поверхностей используются многогранники, но форма граней может быть различной. Пространственный многоугольник с числом вершин больше трех не всегда бывает плоским, а в этом случае алгоритмы изображения многогранников могут привести к некорректному результату. Поэтому программист должен сам позаботиться о том, чтобы многогранник был описан правильно. В этом случае оптимальным выходом из положения является использование треугольников, поскольку треугольник всегда является плоским. В современной графике это, пожалуй, самый распространенный подход.
Но существует и альтернативное направление, которое называется конструктивной геометрией тел. В системах, использующих этот подход, объекты строятся из объемных примитивов с использованием теоретико- множественных операций (объединение, пересечение).
Любая графическая библиотека определяет свой набор примитивов. Так, например, широко распространенная интерактивная система трехмерной графики OpenGL включает в список своих примитивов точки (вершины), отрезки, ломаные, многоугольники (среди которых особо выделяются треугольники и четырехугольники), полосы (группы треугольников или четырехугольников с общими вершинами) и шрифты. Кроме того, в нее входят и некоторые геометрические тела: сфера, цилиндр, конус и др.
Понятно, что для изображения таких примитивов должны быть разработаны эффективные и надежные алгоритмы, поскольку они являются конструктивными элементами. Исторически сложилось так, что первые дисплеи были векторными, поэтому базовым примитивом был отрезок. Но, самая первая интерактивная программа Sketchpad А.Сазерленда в качестве одного из примитивов имела прямоугольник, после чего этот объект уже традиционно входил в различные графические библиотеки.
Здесь мы рассмотрим такие примитивы, как вершина, отрезок, воксель и модели, строящиеся на их основе, а также функциональные модели.