Z-буфер - буфер глубины, один и простейших методов эффективно реализуется аппаратно.
Каждому пикселю П(ху) картинной плоскости кроме цвета хранящегося в видеопамяти сопоставляется расстояние от него до картинной плоскости вдоль оси проецирования (его глубина)
В начале массив глубин инициализируется со значением +00. Для вывода на КП произвольной грани она переводится в растровое представление и для каждого пикселя определяется его глубина. Если глубина меньше глубины в z-буфере, то пиксель рисуется новым цветом и его глубина заносится в Z-буфер.
Для вычисления глубины соседних пикселей при растровом разложении грани можно использовать вариант целочисленного алгоритма Брезенхейма.
Ведем понятие сцены - комплекс изображений пространственных фигур на экране дисплея или в кадре (в кадре)
Сцена:
1) предметы (пространственные объекты),
2) освещение (цвет, число источников света и их характеристики),
3) фон, т.е. плоские объекты, заполняющие пространство экрана, не заполненное предметами.
Для корректного заполнения сцены требуется упорядочить грани изображаемых объектов, то дальние грани выводились раньше, чем более близких. Бывает, что заданные грани нельзя упорядочить, тогда производится разбиение одной или нескольких граней на фрагменты которые легко упорядочить.
Сортировки.
1. Метод сортировки по глубине. Наиболее простой – сортировка по расстояния до картинной плоскости вдоль направления проецирования с последующим выводом в порядке приближения. Иногда просто сортировка по глубине не обеспечивает правильного упорядочивания граней. Поэтому после сортировки проводится проверка порядка вывода граней.
Рассмотрим алгоритм проверки для проецирования по оz. Перед выводом грани P следует убедиться, что никакая Q проекция которой на Oz пересекается с проекцией грани P и не будет закрываться гранью P. Алгоритм состоит из проверок:
а) пересекаются ли проекции этих граней на ось Ox
б) пересекаются ли их проекции на ось Oy
в) находится ли грань P по другую сторону от плоскости проходящей через Q чем начало координат (наблюдатель)
г) находится ли грань Q по ту же сторону от плоскости через P что и начало координат
д) пересекаются ли проекции этих граней на картинную плоскость
Если хотя бы на один из этих вопросов получен отрицательный ответ считаем что они упорядочены верно и сравниваем P с другой гранью, иначе считаем что их нужно поменять местами, для чего вводятся проверки:
е) находится ли грань Q по другую плоскости от плоскости через Q что и начало координат
ж) находится ли грань P по ту же сторону от плоскости через Q что и начало координат
Если ни одна из доп проверок не позволяет с уверенностью решить какую из граней выводить раньше то одна из граней разбивается плоскостью проходящей через другую, тогда вопрос упорядочения решается легко.
2. Метод двоичного разбиения пространства.
Рассмотрим некоторую плоскость в объектном пространстве. \Она разбивает множество всех граней на 2 непересекающихся подмножества (кластера) в зависимости от того в каком полупространстве лежат эти грани. Плоскость не должна пересекать ни одну из граней.
Очевидно что ни одна из граней не лежащих в полу пространке не содержащих наблюдателя не может закрыть грани из полу пространства наблюдателя. Сначала выводятся дальние кластеры, а потом ближние. Также техника упорядочивания применяется и внутри кластера с повтором до тех пор, пока в кластере не останется только 1 грань.
Часто в качестве разделяющей плоскости выбирают одну из существующих. Есть 4 класса:
- лежащих на плоскости
- пересекающих её
- лежащих в положительном полупространстве
- лежащих в отрицательном
Грани, пересекаемые плоскостью, разбиваются вдоль неё. Производится разбиение дерева. Изображение строим в зависимости от использования типа проецирования
Метод построчного сканирования.
Всё изображение на картинной плоскости – ряд горизонтальных пикселей (или вертикальных)
Рассматривается сечение плоскостью проходящей через линию пикселей и через центр проецирования.. Пересечение плоскости с объектами сцены – множество отрезков которые необходимо спроэктировать. Задача удалении невидимых частей решается несложно (учитывается минимальный луч). После определения видимой проэкции грани на кп можно достроить видимую грань целиком.
4. Алгоритм Варнака.
Основан на разбиении картинной плоскости на части для каждой из которых задача видимости решается достаточно просто:
а) видимая часть картинной плоскости делится на 4 равных части
б) если часть полностью закрыта проекцией ближайшей грани или не содержит изображений ни одной грани то закраска очевидна
в) иначе эта часть делится на 4 более мелких и переходим к б