Алгоритм, использующий Z-буфер

Это один из простейших алгоритмов удаления невидимых поверхностей. Работает этот алгоритм в пространстве изображения. Идея z-буфера является простым обобщением идеи о буфере кадра. Буфер кадра используется для запоминания атрибутов (интенсивности) каждого пикселя в пространстве изображения, z-буфер – это отдельный буфер глубины, используемый для запоминания координаты z, или глубины каждого видимого пикселя в пространстве изображения.

Главное преимущество алгоритма – его простота. Кроме того, этот алгоритм решает задачу об удалении невидимых поверхностей и делает тривиальной визуализацию пересечений сложных поверхностей. Сцены могут быть любой сложности. Поскольку габариты пространства изображения фиксированы, оценка вычислительной трудоемкости алгоритма не более чем линейна. Поскольку элементы сцены или картинки можно заносить в буфер кадра или в z-буфер в произвольном порядке, их не нужно предварительно сортировать по приоритету глубины. Поэтому экономится вычислительное время, затрачиваемое на сортировку по глубине. При этом, алгоритм z-буфера, будучи реализованный аппаратно, является самым быстрым алгоритмом удаления невидимых поверхностей.

Основной недостаток алгоритма – большой объем требуемой памяти. Если сцена подвергается видовому преобразованию и отсекается до фиксированного диапазона координат г значений, то можно использовать z-буфер с фиксированной точностью. Для обработки информации о глубине достаточно 32 бит. z-буфер размером 1280*1024*32 бит требует 40 Mb памяти. Но в настоящее время этот недостаток перестал быть актуальным из-за удешевления и миниатюризации элементов памяти.

Альтернативой созданию специальной памяти для z-буфера является использование для этой цели видео памяти.

Другой недостаток алгоритма z-буфера состоит в трудоемкости и высокой стоимости устранения лестничного эффекта, а также реализации эффектов прозрачности и просвечивания.

При визуализации изображения, как пиксельная информация, так и глубина усредняются. В этом методе требуются очень большие объемы памяти. Например, изображение размером 512х512х24 бита, использующее z-буфер размером 20 бит на пиксель, разрешение которого повышено в 2 раза по осям х и у, и на котором устранена ступенчатость методом равномерного усреднения, требует почти 6 Mb памяти.

 

Описание алгоритма z-буфера таково:

 

Заполнить буфер кадра фоновым значением интенсивности или цвета.

 

Заполнить z-буфер минимальным значением z.

 

Преобразовать каждый многоугольник в растровую форму в произвольном порядке.

 

Для каждого Пиксель(x, y) в многоугольнике вычислить его глубину z(х, у).

 

Сравнить глубину z(x, у) со значением Z буфер(x, у), хранящимся в z-буфере в этой же позиции.

 

Если z(х, у) > Z буфер(x, у), то записать атрибут этого многоугольника (интенсивность, цвет и т. п.) в буфер кадра и заменить Z буфер(х, у) на z(х, у).

 

В противном случае никаких действий не производить.

 

В качестве предварительного шага там, где это целесообразно, применяется удаление нелицевых граней.

 

Если известно уравнение плоскости, несущей каждый многоугольник, то вычисление глубины каждого пикселя на сканирующей строке можно проделать пошаговым способом. Напомним, что уравнение плоскости имеет вид

 

ах + by + cz + d = 0

z = -(ах + by + d)/с

 

Для сканирующей строки y = const. Поэтому глубина пикселя на этой строке, у которого х1 = x + Dх, равна

z1 – z = -(ах1 + d)/c + (ах + d)/с = а(х – х1)/с

или

z1 = z-(a/c)Dx

 

Но Dx = 1, поэтому z1 = z – (а/с).

 

Освещение

В любом трёхмерном приложении использование какой-либо модели освещения всегда придаёт реалистичность обрабатываемой сцене. Как правило, в неё включается закон, по которому рассчитывается освещённость точки в пространстве, и метод закраски освещённого многоугольника. От выбора той или иной модели освещения зависит качество изображения, построенного компьютером, и скорость работы программы.

Обычно освещённость некоторой точки, принадлежащей грани в пространстве, складывается из рассеянной освещённости и диффузного отражения потока света, отражающегося от поверхности объекта. Иногда к ним добавляют зеркальноеотражение — поток света, отражающийся от внешней поверхности объекта под тем же углом, под которым он падал на эту поверхность. Однако в данной работе зеркальное отражение света не учитывается, так предварительно производится расчет карты освещенности, которая затем модулируется с текстурой и накладывается на трехмерный объект, а при расчете зеркальной компоненты света учитывается положение наблюдателя, которое может быть различным в определенный момент времени (нужно будет пересчитывать карту освещенности заново, что недопустимо). Кроме того, расчёт интенсивности зеркального отражения, например по модели Фонга, требует немалых вычислительных затрат. Для него требуется рассчитывать угол между вектором наблюдения и вектором отражения и возводить косинус этого угла в некоторую степень, зависящую от свойств поверхности.

Диффузное отражение присуще матовым поверхностям. Матовой можно считать такую поверхность, размер шероховатостей которой настолько велик, что падающий луч рассеивается неравномерно во все стороны. Такой тип отражения характерен, например, для гипса, песка, бумаги. Диффузное отражение описывается законом Ламберта, согласно которому интенсивность отраженного света пропорциональна косинусу угла между направлением на точечный источник света и нормалью к поверхности.

 

 

Рис. 2.1.7.1. Матовая поверхность

 

,

где - интенсивность источника света, - коэффициент, который учитывает свойства материала поверхности. Интенсивность отраженного света не зависит от расположения наблюдателя.

Матовая поверхность имеет свой цвет. Наблюдаемый цвет матовой поверхности определяется комбинацией собственного цвета поверхности и цвета излучения источника света (в данной работе цвет излучения источника считается белым, поэтому учитывается только цвет поверхности).

Для точечного источника света можно еще усовершенствовать модель отражения, если учесть, что энергия уменьшается пропорционально квадрату расстояния и пропорционально расстоянию.

Кроме того, в данной программе вместо интенсивности света используется расширенная величина цвет света, которая состоит из трех компонент (R, G, B)

 

Итак, цвет в данной точке для одного источника направленного освещения рассчитывается по следующей формуле:

Для точечного источника света:

Где I – это интенсивности источников света (R, G, B)

Kd - способность материала отражать диффузный свет (тоже имеет R, G, B)

d – Расстояние от источника света до рассматриваемой точки поверхности,

c1, c3, c3 – произвольные коэффициенты угасания, которые находятся эмпирическим путем

Для определения косинуса угла между вектором нормали к поверхности и вектором, определяющим положение источника света в пространстве, следует воспользоваться скалярным произведением. Пусть имеется вектор нормали  и две точки – , принадлежащая поверхности, и , определяющая положение источника. Вектор, направленный от точки поверхности к источнику света, имеет следующие координаты: . Тогда

,

,

,

 

или

.

Следовательно

.

Однако в программе используются, как правило, единичные вектора нормалей, что в данном случае позволяет уменьшить количество требуемых вычислений. В итоге:

,

или, более развернуто,

.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: