
- •Синхронизация процессов и цепочек
- •Венгерская нотация, ссылки и ресурсы
- •Стандартные кисти, иконки, курсоры
- •Пример:
- •Введение в ресурсы
- •Курсоры, пиктограммы и растровые изображения
- •Работа с текстом
- •Работа с мышью
- •Ресурс панель диалога
- •Основные понятия машинной графики
- •Рассмотрим такие примитивы, как вершина, отрезок, воксель и модели, строящиеся на их основе, а также функциональные модели. Полигональные модели
- •Воксельные модели
- •Поверхности свободных форм (функциональные модели)
- •Проекции
- •Различают следующие проекции.
- •Алгоритм Коэна - Сазерленда отсечения прямоугольной областью
- •Метод дихотомии
- •Задача удаления невидимых линий и поверхностей
- •Удаление нелицевых граней многогранника. Алгоритм Робертса
- •Алгоритм Варнока
- •Алгоритм Вейлера-Азертона
- •Метод z-буфера
- •Методы приоритетов. Алгоритм художника.
- •Алгоритм плавающего горизонта
- •Алгоритмы построчного сканирования для криволинейных поверхностей
- •Библиотека OpenGl
- •Простейшая программа
- •Создание формы
- •Формат пикселя
- •Вершины и система координат
- •Треугольники
- •Многоугольники
- •Область рисования
- •Преобразование координат. Матрицы
- •Видовое преобразование. Масштабирование, поворот и перенос
- •Параметры вида. Перспективная проекция
- •Буфер глубины
- •Надстройки над OpenGl
- •Источник света
- •Свойства материала и модель освещения
- •Отсечение
- •Анализ алгоритмов. Модель вычислений
- •Асимптотический анализ алгоритмов
- •Анализ рекурсивных алгоритмов
- •Метод заметающей прямой
- •Метод локусов. Задачи геометрического поиска
- •Задачи регионального поиска. Многомерное двоичное дерево
- •Задачи локализации точки. Метод луча
- •Локализация точки на планарном подразбиении. Метод полос
- •Некоторые основные понятия вычислительной геометрии
- •Построение звездчатого полигона
- •Предварительная разработка алгоритма построения выпуклой оболочки на плоскости
- •Метод обода Грэхема
- •Триангуляция Делоне
- •Диаграмма Вороного
- •Построение диаграммы Вороного
- •Модель osi
- •Уровни модели tcp/ip
Метод z-буфера
Это
один из простейших алгоритмов удаления
невидимых поверхностей. Работает этот
алгоритм в пространстве изображения.
Идея Z-буфера является простым обобщением
идеи о буфере кадра. Буфер кадра
используется для запоминания атрибутов
каждого пикселя в пространстве
изображения, а Z-буфер предназначен для
запоминания глубины (расстояния от
картинной плоскости) каждого видимого
пикселя в пространстве изображения.
Поскольку достаточно распространенным
является использование координатной
плоскости
в
качестве картинной плоскости, то глубина
равна координате
точки,
отсюда и название буфера. В процессе
работы значение глубины каждого нового
пикселя, который нужно занести в буфер
кадра, сравнивается с глубиной того
пикселя, который уже занесен в Z-буфер.
Если это сравнение показывает, что новый
пиксель расположен впереди пикселя,
находящегося в буфере кадра, то новый
пиксель заносится в этот буфер и, кроме
того, производится корректировка
Z-буфера новым значением глубины. Если
же сравнение дает противоположный
результат, то никаких действий не
производится. По сути, алгоритм является
поиском по
и
наибольшего
значения функции
.
Главное преимущество алгоритма - его простота. Кроме того, этот алгоритм решает задачу об удалении невидимых поверхностей и делает тривиальной визуализацию пересечений сложных поверхностей. Сцены могут быть любой сложности. Поскольку габариты пространства изображения фиксированы, оценка вычислительной трудоемкости алгоритма не более чем линейна. Поскольку элементы сцены или картинки можно заносить в буфер кадра или в Z-буфер в произвольном порядке, их не нужно предварительно сортировать по приоритету глубины. Поэтому экономится вычислительное время, затрачиваемое на сортировку по глубине.
Основной недостаток алгоритма - большой объем требуемой памяти. В последнее время в связи с быстрым ростом возможностей вычислительной техники этот недостаток становится менее существенным.
В целом алгоритм выглядит так:
Заполнить буфер кадра фоновым значением интенсивности или цвета.
Заполнить z-буфер минимальным значением z.
Преобразовать каждый многоугольник в растровую форму в произвольном порядке.
Для каждого Пиксель(x,y) в многоугольнике вычислить его глубину z(x,y).
Сравнить глубину z(x,y) со значением Zбуфер(x,y), хранящимся в z-буфере в этой же позиции.
Если z(x,y)>Z(x,y), то записать атрибут этого многоугольника (интенсивность, цвет и т.п.) в буфер кадра и заменить Zбуфер(x,y) на z(x,y).
В противном случае никаких действий не производить.
Методы приоритетов. Алгоритм художника.
Необходимо сформировать предварительный список приоритетов по глубине, используя в качестве ключа сортировки значение Zmin для каждой грани. Первой в списке будет грань с минимальным значением Zmin. Эта грань лежит дальше всех от точки наблюдения, расположенной в бесконечности на оси +Z. Обозначим ее Р, а следующую в списке грань через Q (рис.1). Для каждой грани Р из списка надо проверить ее отношение с Q. Если ближайшая вершина Р (Pzmax) будет дальше от точки наблюдения, чем самая удаленная вершина Q (Qzmin), т.е. Qzmin>=Pzmax, то никакая часть Р не может закрывать Q. Следовательно, Р можно занести в буфер кадра.
Если Qzmin<Pzmax, то Р потенциально закрывает не только Q, но и любую другую грань типа Q из списка, для которого Qzmin<Pzmax. Тем самым образуется множество {Q}. Однако Р может фактически и не закрывать ни одну из этих граней, тогда Р заносится в буфер кадра.
Приведем следующие тесты в порядке возрастания сложности:
Пересекаются ли проекции граней P и Q на ось Ох?
Пересекаются ли проекции граней P и Q на ось Оу?
Если хотя бы на один из этих двух тестов получен отрицательный ответ, то проекции граней Р и Q на картинную плоскость не пересекаются и, следовательно, порядок, в котором они выводятся не имеет значения. Поэтому будем считать, что грани упорядочены верно. Для проверки этих условий удобно использовать ограничивающие тела. В случае, когда оба теста дали утвердительный ответ, проводятся следующие тесты.
4. Находятся ли грань Q и наблюдатель по одну сторону от плоскости, проходящей через грань Р? (рис.3)
Если хотя бы на один из этих тестов получен утвердительный ответ, то считаем, что грани Р и Q упорядочены верно, и сравниваем Р со следующей гранью. Иначе необходимо поменять Р и Q местами, пометив позицию Q в списке и повторить тесты с новым списком.
Если сделана попытка вновь переставить Q, значит обнаружена ситуация циклического экранирования (рис.4). В этом случае Р разрезается плоскостью несущей Q, исходная грань Р удаляется из списка, а ее части заносятся в список. Тесты повторяются для нового списка.