Оглавление Дополнительное чтение Учебник «Компьютерная графика» Лекция 20. Психофизиологические аспекты восприятия пространства и воспроизведения его на плоскости Лекция 22. Психофизиологические аспекты восприятия цвета и света

Часть III / Лекция 21. Методы удаления невидимых линий

Метод z-буфера

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

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

Основной недостаток алгоритма — большой объем требуемой памяти.

Дадим словесное описание алгоритма z-буфера.

  1. Заполнить буфер кадра фоном, а z-буфер памяти — числом zmin.
  2. Преобразовать многогранник в растровую форму:
    • ax + by + cz + d = 0 — плоскость.
      (x1, y1, z1)
      (x2, y2, z2)
      ...
      (xn, yn, zn)
      a = S(yi - yi+1) * (zi + zi+1)
      b = S(zi - zi+1) * (xi + xi+1)
      c = S(xi - xi+1) * (yi + yi+1)
    • z = -(ax + by + d)/c. Выражаем изменение плоскости вдоль одной из осей.

      z - z' = -(ax1 + d)/c + (ax + d)/c = a(x - x1)/c
      z1 = z - (a/c)Dx, но Dx = 1, поэтому
      z1 = z - (a/c), где z1 — новая координата, а z — старая координата.

  3. Вычислить для каждой точки (x, y) многоугольника значение z(x, y) — глубины нахождения в прямоугольнике.
  4. Сравнить полученное z с соответствующим zбуфера, полученным по координатам в буфере.
  5. Если вычисленное z меньше zбуфера, то изображение помещаем в буфер кадра, а zбуфера присваиваем z.
Дополнительное чтение

Алгоритм плавающего горизонта

Дополнительное чтение

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

Дополнительное чтение

Алгоритмы, использующие список приоритетов

Лекция 20. Психофизиологически... Лекция 22. Психофизиологически...