- •Оглавление
- •Предисловие
- •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.2. Отсечение плоских фигур
Рассмотрим задачу об отсечении произвольного многоугольника по границе заданного выпуклого многоугольника (рис.8.3). Алгоритм сводит основную задачу к серии более простых задач об отсечении многоугольника вдоль прямой, проходящей через одно из ребер отсекающего многоугольника.
Рис.8.3. Алгоритм отсечения плоских фигур
На каждом шаге выбираем очередное (рис. 8.4) ребро отсекающего многоугольника (ребра с цифрами). Предварительно необходимо договориться о направлении обхода вершин отсекаемого многоугольника (по часовой стрелке или против неё). После этого поочередно проверяется положение всех вершин данного многоугольника относительно прямой, проходящей через выбранное текущее ребро. При этом в результирующий многоугольник добавляется 0, 1 или 2 вершины.
Рис. 8.4. Пошаговое выполнение алгоритма
При последовательном отсечении многоугольника по четырем границам возможны 4 различных ситуации (рис. 8.5). Может также возникнуть вариант, когда ребро совпадает с границей.
+P; +Q
--
+Q
+P
Рис. 8.5. Различные случаи алгоритмы
Предположим, что точка S уже обработана, тогда могут произойти следующие случаи.
В случае 1: ребро целиком лежит во внутренней области и точка P добавляется в результирующий многоугольник.
В случае 2: в результирующий многоугольник добавляется точка пересечения Q.
В случае 3: обе вершины лежат во внешней области и поэтому в результирующий многоугольник не добавляется ни одной точки.
В случае 4: в результирующий многоугольник добавляются точка пересечения Q и точка P.
8.3. Алгоритм удаления нелицевых граней
Если сцена состоит только из выпуклых многогранников, то внутренние грани многоугольников никогда не будут видны.
Рис.8.6. Анализ лицевой грани
Но
у такого выпуклого многогранника часть
граней будет повернута от наблюдателя
(нелицевые грани). Следовательно, они
тоже не будут видны наблюдателю. Принцип
отбраковки нелицевых граней поясняется
на рис.8.6. Внешняя сторона многоугольника
будет видима наблюдателю только в том
случае, если нормаль к плоскости
многоугольника будет направлена к
наблюдателю. Обозначим через θ
угол между внешней нормалью плоскости
многоугольника и направлением на
наблюдателя, тогда многоугольник будет
представлять лицевую грань объекта
только том случае, если -90° < θ
< 90°, или, что то же самое, если
.
Если уравнение плоскости, в которой лежит многоугольник, имеет вид
ax+by + cz + d = 0, то для определения, является ли грань лицевой или нелицевой, потребуется только проверить знак коэффициента с. Такую проверку можно выполнить как программно, так и аппаратно.
При использовании отбраковки нелицевых граней нужно только тщательно проанализировать, допустимо ли это делать с учетом специфики конкретного приложения. Этот вид отсечения обычно также автоматически осуществляется стандартными API и ожидаемый от него эффект – удаление примерно половины граней в пирамиде видимости.
8.4. Алгоритм z-буфера
Рассмотрим алгоритм удаления невидимых граней с использованием z-буфера, который является одним из наиболее часто используемых в современных приложениях компьютерной графики. Он работает в пространстве изображения и применяется в таких популярных графических библиотеках как OpenGL и Direct3D.
Алгоритм
работает в параллельной проекции. Пусть
размеры окна вывода или экрана составляют
X
точек в ширину и Y
точек в высоту. В качестве z-буфера
используется двумерный прямоугольный
массив чисел по размерности совпадающий
с окном вывода или экрана, т.е. X
Y.
В буфере будут храниться текущие значения
z-координат
каждого пиксела.
В начале работы алгоритма в z-буфер заносятся значения, соответствующие бесконечности. Каждая грань трехмерного объекта, представленная в виде многоугольника, преобразуется в растровую форму. При разложении в растр для каждой точки многоугольника вычисляется значение ее z-координаты. Если z-координата оказалась меньше чем текущее значение в z-буфере, то в z-буфер заносится z-координата точки, и на экране рисуется точка цветом текущего многоугольника. После разложения в растр всех многоугольников изображение трехмерной сцены построено (рис.8.7) .
Рис.8.7. Алгоритм z-буфера
