Алгоритм удаления невидимых поверхностей Z-буфер

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

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

Заведем двумерный массив (собственно Z-буфер) размером с экран, и заполним все его элементы каким-то большим числом, настолько большим, что координаты z для всех точек сцены заведомо меньше. Для каждой рисуемой точки подсчитаем значение ее координаты z. Если оно больше, чем значение в Z -буфере (точка закрыта какой-то другой точкой), или меньше, чем 0 (точка находится за камерой), то переходим к следующей точке. Если меньше, то рисуем точку на экране, а в z -буфер записываем значение координаты z текущей точки.

Имеет смысл считать значения не z, а . Тогда условия чуть изменяются – точка загорожена другой, если значение w меньше значения в Z -буфере; и точка находится за камерой, если w < 0. Буфер инициализируем нулями. Тогда не нужна проверка на положительность w - точка попадает в Z -буфер и на экран, только, если w больше текущего значения, и поэтому точки, для которых w < 0 в буфер никогда не попадут.

Для рисования граней объекта пригодны алгоритмы закрашивания по точкам многоугольников, рассмотренные выше. Единственное, что необходимо в них добавить, это работу с Z -буфером и расчет координаты Z для текущей точки поверхности треугольника по ее уже рассчитанным координатам X и Y и координатам трех вершин треугольника.


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



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