- •Оглавление
- •Предисловие
- •1. Компьютерная графика, геометрическое моделирование и решаемые ими задачи
- •Основные понятия и определения
- •1.2. Применение интерактивной графики в информационных системах, графические диалоговые системы
- •Контрольные вопросы и задания
- •2. Представление видеоинформации и ее машинная генерация
- •2.1 Характеристики изображения
- •2.2. Растровая графика
- •2.3. Векторная графика
- •2.4. Представление цвета в компьютерной графике
- •Контрольные вопросы и задания
- •3. Форматы графических файлов
- •3.1. Сжатие изображений
- •3.2. Растровые файлы, метафайлы, графические языки
- •Контрольные вопросы и задания
- •4. Графические объекты, примитивы и их атрибуты
- •4.1.Примитивы
- •4.2. Атрибуты
- •4.3. Модели геометрического представления объектов
- •Контрольные вопросы и задания
- •5. Кривые и криволинейные поверхности
- •5.1. Представление кривых и поверхностей в явной форме
- •5.2. Неявная форма представления кривых и поверхностей
- •5.3. Параметрическая форма представления кривых и поверхностей
- •5.4. Параметрические полиномиальные кривые
- •5.5. Общая характеристика полиномиальной параметрической формы представления
- •5.6. Параметрическая непрерывность
- •5.7. Геометрическая непрерывность
- •5.8. Элементарная кубическая кривая Безье
- •5.10. Поверхности Безье
- •Контрольные вопросы и задания
- •6. Базовая графика. Аффинные преобразования
- •6.1. Однородные координаты
- •6.2. Аффинные преобразования на плоскости
- •6.3. Аффинные преобразования в пространстве
- •6.4. Пространственный поворот относительно точки
- •Контрольные вопросы и задания
- •7. Проективные преобразования
- •Контрольные вопросы и задания
- •8. Алгоритмы отсечения невидимых линий и поверхностей
- •8.1. Алгоритм Коэна-Сазерленда
- •8.2. Отсечение плоских фигур
- •8.3. Алгоритм удаления нелицевых граней
- •8.4. Алгоритм z-буфера
- •8.5. Отсечение пирамидой видимости
- •8.6. Потенциально видимые множества граней
- •8.7. Метод иерархических подсцен
- •Контрольные вопросы и задания
- •9. Растровые алгоритмы
- •9.1. Алгоритмы вывода прямой линии
- •9.2. Алгоритмы закрашивания
- •9.3. Сглаживание ступенчатости линий на изображении
- •Контрольные вопросы и задания
- •10. Свет и материя
- •10.1. Источники света
- •10.2. Модели отражения света
- •10.3. Методы тонирования поверхностей
- •Контрольные вопросы и задания
- •11. Реализация аппаратно-программных модулей графической системы
- •11.1. Архитектура графических терминалов и графических
- •11.2. Современные стандарты компьютерной графики
- •Контрольные вопросы и задания
- •12. Лабораторные работы по курсу «компьютерная графика» Лабораторная работа №1
- •Контрольные вопросы и задания
- •Лабораторная работа №2
- •Контрольные вопросы и задания
- •Лабораторная работа №3
- •Контрольные вопросы и задания
- •Лабораторная работа №4
- •Варианты заданий
- •Контрольные вопросы и задания
- •Библиографический список
- •Учебное пособие
8.5. Отсечение пирамидой видимости
Метод основан на том, что обработке в геометрическом конвейере подвергаются только те объекты, которые находятся в видимом объеме пространства. Видимое пространство обычно определяется трапецией, представляющей проекцию усеченной пирамиды видимости, или самой пирамидой видимости. Отсечение пирамидой видимости реализовано в стандартных API (Direct3D, OpenGL). Основной недостаток метода в том, что для отсечения граней необходимо осуществить проверку каждого полигона сцены на вхождение в область видимости, что достаточно трудоемко при визуализации сложных сцен.
8.6. Потенциально видимые множества граней
Метод отсечения основан на том, что для каждой ячейки сцены ищется набор ячеек, потенциально видимых из заданной области. При визуализации из массива извлекается подмножество граней, лежащих внутри пирамиды видимости, и передается в систему. Расширением этого метода является метод порталов. В методе порталов вся визуализируемая сцена разбивается на ряд областей, и далее анализируется, каким образом эти области соединены между собой. Те соединения, через которые можно видеть объекты называются порталами. Метод используются для визуализации закрытых помещений, ограниченных стенами, и не применим для синтеза открытых пространств. К недостаткам метода относится то, что он требует значительного времени на этапе предварительной обработки сцены.
8.7. Метод иерархических подсцен
Метод использует идентификацию видимых частей сцены, уменьшая тем самым число граней для визуализации. Метод базируется на идее, что виртуальный мир можно разбить на ячейки. В настоящее время существует несколько разновидностей этого метода – двоичное разбиение пространства (BSP - Binary Space Partitioning), окто- (octtree) и квадродеревья (quadtree). Метод позволяет визуализировать только те области разбиения, которые попадают в поле зрения.
Достоинством этого метода отсечения является то, что за малое число тестов анализируется большое число граней. К недостаткам принадлежит то обстоятельство, что обработке могут быть подвергнуты полигоны, закрытые от наблюдателя другими поверхностями.
Контрольные вопросы и задания
Для чего применяются алгоритмы удаления невидимых линий и поверхностей?
На чем основан алгоритм Коэна-Сазерленда?
В чем принцип действия алгоритма удаления нелицевых граней?
Что представляет собой метод z-буфера?
Дайте определение порталу.
Какие разновидности метода иерархических подсцен Вы знаете?
9. Растровые алгоритмы
9.1. Алгоритмы вывода прямой линии
Пусть заданы координаты (x1,y1) и (x2,y2) концов отрезка прямой линии. Для вывода линии необходимо закрасить в определенный цвет все пикселы вдоль линии. Для того чтобы закрасить каждый пиксел, необходимо знать его координаты.
Алгоритм ЦДА. Простейший алгоритм растрового преобразования линейного отрезка известен как алгоритм ЦДА [24]. Этот алгоритм "позаимствован" у специализированных вычислителей - цифровых дифференциальных анализаторов, которые использовались для численного решения систем дифференциальных уравнений. Поскольку прямая описывается дифференциальным уравнением вида dy/dx = m, где m — коэффициент наклона, формирование прямолинейного отрезка есть не что иное, как решение этого простейшего уравнения численным методом.
Пусть отрезок задан крайними точками (х1,у1) и (х2,у2) (рис. 9.1).
Рис. 9.1. Прямолинейный отрезок в системе координат
Будем считать, что значения координат округлены до ближайшего целого, т.е. отрезок начинается и заканчивается в центре соответствующего пиксела. Коэффициент наклона отрезка определяется соотношением:
.
Будем считать, что 0 < т < 1. При других вариантах значения т можно использовать симметричную модификацию алгоритма.
В основе алгоритма лежит запись кода цвета в ячейку буфера, представляющую определенный пиксел, по мере того как х изменяется от х1 до х2. Между элементарными приращениями δx и δy координат точки, которая перемещается от начала отрезка к его концу, существует связь: δy=m*δx.
Если на каждом шаге увеличивать значение х на 1, т.е. принять δx=1, то координату у отображающей точки нужно увеличить на величину δy=т. Хотя каждое очередное значение х представляет целое число, очередное значение у таковым не является, поскольку m в общем случае — дробь. Поэтому значение у нужно округлить и найти подходящий пиксел, представляющий текущее положение отображающей точки (рис. 9.2).
Рис.9.2. Формирование пикселей при использовании алгоритма ЦДА
Алгоритм Брезенхема рисования линии. Описанный алгоритм ЦЦА при всей его простоте и наглядности обладает одним недостатком – при формировании координат каждой отображающей точки необходимо выполнять сложение действительных чисел. Более простой целочисленный алгоритм предложил Брезенхэм в 1965 году [21, 24]. Как и в алгоритме ЦДА, будем считать, что конечные точки отрезка представлены целочисленными координатами (x1, y1) и (х2, у2), а коэффициент наклона удовлетворяет условию 0 < m < 1.
Это условие достаточно критично для работоспособности алгоритма. Суть алгоритма в том, что при построении растрового образа отрезка выбирается пиксел, ближайший по вертикали к соответствующей прямой. Рассмотрим промежуточный шаг растрового преобразования отрезка после того, как будет сформирован пиксел (i + 1/2, j + 1/2) (рис.9.3).
Рис.9.3. Алгоритм Брезенхема
Известно, что прямая описывается уравнением: y=тх + h.
При х = i + 1/2 прямая проходит от центра пиксела, точки с координатами (i, j+1/2), не далее, чем на 1/2 шага между пикселами. В противном случае образ прямой вследствие округления не прошел бы через этот пиксел. При переходе к следующей точке, для которой х = i + 3/2, учитывая ограничения, наложенные на значение коэффициента наклонa, образ отрезка должен пройти либо через пиксел с центром в (i+3/2, j+1/2), либо через пиксел с центром в (i+3/2, j+3/2).
Проблема выбора решается с помощью характеристической переменной d = b - a, где а и b расстояния между прямой в точке х=i+3/2 и верхним и нижним пикселами кандидатами (рис. 9.4).
Рис. 9.4. Характеристическая переменная алгоритма Брезенхема
Если d отрицательно, прямая проходит ближе к центру нижнего пиксела в качестве следующего пиксела образа отрезка выбирается (i+3/2, j+ 1/2).
В противном случае выбирается пиксел с центром в (i + 3/2, j + 3/2).
Можно было бы определить значение d, вычислив у = тх + b, но тогда теряется одно из заявленных достоинств алгоритма – использование только целочисленных операций, поскольку т является действительной дробью.
Поэтому, во-первых, операции над числами с плавающей точкой заменяются операциями над числами с фиксированной точкой, а во-вторых, все вычисления выполняются в приращениях.
Изменим
определение характеристической
переменной. Будем использовать
.
Это изменение
не влияет на выбор пикселов-кандидатов,
поскольку для принятия решений
используется только знак характеристической
переменной, а он в новой формулировке
будет таким же, как и в прежней.
Подставляя
в выражение d
значения а
и b,
полученные из уравнения прямой, и
принимая во внимание, что
,
,
приходим
к выводу, что d
принимает только целочисленные значения.
Итак, удалось избавиться от операций
над действительными числами, но
непосредственное вычисление d
все же требует большого количества
вычислений, хотя и целочисленных.
Поэтому несколько изменим подход. Пусть dk— значение d при х=k+1/2. Попробуем вычислить dk+i в приращениях относительно dk. Значение приращения будет зависеть от того, выполнялось ли на предыдущем шаге приращение координаты у пиксела. Возможные варианты представлены на рис 9.5.
Рис.9.5. Приращение значений параметров a и b
Для
параметров а
и b
— расстояний
между прямой и пикселами-кандидатами
— справедливы следующие соотношения:
если на предыдущем шаге произошло
приращение у,
то
.
В противном
случае
.
Умножив полученные выражения на Δх, получим, что при переходе к следующему значению х значение d изменяется либо на 2Δу, либо на 2(Δу-Δх).
Этот результат можно записать в таком виде:
В результате вычисление каждого очередного пиксела растрового образа отрезка потребует только одной операции сложения целых чисел и анализа знака. Алгоритм настолько эффективен, что в аппаратно он реализован в виде одной инструкции.
