Разделы
О сайте
Услуги
Соглашение
Проекты
FAQ
Исходники
Доки
Алгоритмы
Форматы
Download
Ссылки
Заказать
Форум
Гостевая
 
Алгоритмы

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

Для реализации этого алгоритма требуется не только буфер регенерации, но еще и буфер глубины, z-буфер, в который помещается информация о координате z для каждого писксела. Вначале в z-буфер заносятся значения большие максимально возможного значения z, а буфер регенерации заполняется значениями пткселов, описывающими фон. Затем каждый многоугольник преобразуется в растровую формуи записывается в буфер регенерации. При разложении в растр для каждой точки многоугольника выполняются следующие шаги: Вычисление глубины многоугольника z(x,y) в точке (x,y) Если z(x, y) меньше, чем значение z-буфера в позиции (x, y), то z(x, y) заносятся в элемент (x, y) z-буфера и значение пиксела, которое имеет многоугольник в рассматриваемой точке, помещается в элемент (x,y) буфера регенерации. Если условие на шаге 2 выполняется, считается, что точка многоугольника расположена ближе к наблюдателю, чем точка, значение яркости которой находилось в позиции (x, y) буфера регенерации. Поэтому записываются новые значения глубины и яркости. Главным недостатком этого алгоритма является требование большого объема памяти под z-буфер. Однако реализация алгоритма очень проста. Эксплуатационные остаются почти все время почти постоянными, поскольку в среднем с ростом числа многоугольников в видимом объеме уменьшается число пикселов, покрываемых одним многоугольником. Поэтому средний размер каждого множества пар, среди которых производится поиск, практически постоянен. Пусть некоторый треугольник построчно преобразуется в растровую форму. Вычисление координаты z для каждой точки сканирующей строки модно упростить, воспользовавшись тем, что многоугольник плоский, то есть z линейна относительно x и y. Если плоскость многоугольника описывается уравнением: A*x + B*y + C*z + D = 0, из которого легко выражается z: z= -(D + A*x + B*y)/C, теперь, если в точке (x, y), z=z0, то в точке (x + dx, y), zx = z0-A/C*d x и, соответственно, в точке (x, y + dy) zy = z0-B/C*d y, если учесть, что d x=1 и d y=1, выражения упрощаются и остаются постоянные члены для данного многоугольника. Таким образом, зная глубину в одной точке, легко вычислить глубины в каждой следующей, выполнив лишь одно вычитание. Написал Вася Пупкин.


 


Рейтинг@Mail.ru be number one Submitter.ru - Promoting!
Хостинг от uCoz