- •Оглавление
- •Предисловие
- •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. Алгоритмы отсечения невидимых линий и поверхностей
Одной из важнейших задач компьютерной графики является определение того, какие части объектов будут видны при визуализации, а какие не попадут в область видимости или будут закрыты от наблюдателя другими объектами. Это в значительной степени повышает скорость работы графической системы, так как нет необходимости обрабатывать те объекты, которые не будут видны на экране. Анализ видимости объектов можно производить как на картинной плоскости, так и в трехмерном пространстве.
8.1. Алгоритм Коэна-Сазерленда
Суть задачи отсечения двухмерных отрезков поясняется на рисунке 8.1. Проецирование уже выполнено и имеется двухмерное описание изображения в картинной плоскости. На этой же плоскости определена и рамка отсечения, которая соответствует видовому окну на экране дисплея. Все параметры заданы вещественными числами.
Рис. 8.1. Двумерное отсечение
Можно вычислить координаты точек пересечения прямой с рамкой видимости и использовать эту информацию для отсечения. Однако, необходимо минимизировать объем вычислений и обойтись без определения точек пересечения, которое непременно включает операцию деления чисел с плавающей точкой. Исторически первым, отвечающим этим требованиям, был алгоритм Коэна-Сазерленда, в котором большинство операций умножения и деления заменены операциями сложения и вычитания действительных чисел и побитовыми логическими операциями булевой алгебры.
Выполнение алгоритма начинается с продления сторон рамки отсечения в обе стороны до бесконечности, в результате чего картинная плоскость делится на девять областей (рис.8.2).
Рис.8.2. Характеристические коды областей
Каждой области присваивается четырехразрядный двоичный номер - характеристический код(b0b1b2b3), который формируется следующим образом. Пусть (х,у)— координаты некоторой точки на картинной плоскости. Тогда
Аналогично, b1, приравнивается 1, если у < утin, а значения b2 и b3 определяются отношением между компонентой х и абсцисcами левой и правой границ рамки отсечения. В результате девяти областям присваиваются коды, представленные на рис.8.2.
При анализе отрезка первым делом определяется, в каких областях находятся его конечные точки, и им присваиваются соответствующие характеристические коды. Эта процедура требует выполнения восьми операций вычитания на каждый отрезок.
Рассмотрим отрезок, конечные точки которого имеют характеристические коды o1=outcode(x1,y1) и о2=outcode(x2, y2). Возможны четыре варианта сочетания характеристических кодов двух конечных точек (рис.8.1).
1. (о1 = o2 = 0). Обе конечные точки лежат внутри рамки отсечения — этот случай представлен отрезком АВ на рис.8.1. Весь отрезок при этом также находится внутри рамки отсечения и может быть передан дальше для выполнения растрового преобразования.
2. (o1≠0, o2 = 0 или наоборот). Одна точка находится внутри рамки отсечения, а вторая — вне ее (отрезок CD на рис. 8.1). В этом случае отрезок необходимо разделить.
3. (о1 & o2≠0). По результату побитовой операции AND над характеристическими кодами крайних точек можно выяснить, лежат ли они по одну сторону от границы рамки или по разные. Если результат отличен от нуля, то конечные точки лежат по одну сторону от какой-либо границы, а значит, весь отрезок лежит вне рамки отсечения и его можно спокойно отбросить (отрезок EF на рис.8.1).
4. (o1 & о2 = 0) . Обе конечные точки лежат вне рамки отсечения, но по разные стороны от двух ее границ. Этот вариант представлен отрезками GH и IJ на рис.8.1. Здесь нельзя с уверенностью сказать, пересекает отрезок зону видимости или нет. Требуется более тщательный анализ — нужно вычислить точку пересечения с одной из границ рамки и проанализировать характеристические коды крайних точек двух новых отрезков.
Для анализа характеристических кодов достаточно только булевых побитовых операций над двоичными числами, которые выполняются очень быстро. Вычисление точек пересечения выполняется чрезвычайно редко и только там, где без этой информации не обойтись, — во втором и четвертом вариантах сочетаний характеристических кодов.
