4.3.
Алгоритм с использованием буфера глубины.
Синтез изображения в общем случае: алгоритм с
использованием буфера глубины.
Суть метода: кроме плоскости изображения резервируем
память, точно соответствующую объему изображения, а в буфер глубины записываем
величину (g) равную удаленности точки объекта от наблюдателя. При обработки
любой точки сравниваем удаленность точки с величиной, хранимой в буфере. В
буфер глубины можно записывать Евклидово расстояние.
Можно восстановить пространственную
координату и посчитать R для любой точки (нужно для прорисовки отрезка на поле
изображения).
Если в буфер глубины записываем Евклидово
расстояние, то получится:
В результате интерполяции Евклидово расстояние это
середина отрезка. В буфер G записывать величину R при линейной интерполяции
нельзя. Глубину (S) тоже нельзя записывать в буфер глубины, т. к. ее нельзя
будет линейно интерполировать. Но в буфер глубины можно записать параметр
глубины (h),т. к. h может быть линейно интерполирована в плоскости изображения.
, где A и B – любые
числа
Для величины h вводим буфер глубины H. H-буфер – это
некоторая область памяти. Она имеет разрядность. Размер этой области равен
размеру изображения.
при ; Smax
– задний план
при ; Smin
– передний план
Все что находится за Smax и перед Smin
отсекается. Пирамида видимости –
это пространственная пирамида (все что находится в ней попадает в поле
видимости). Если объект находится за пределами пирамиды видимости, то он не
изображается.
h обладает рядом достоинств:
1) соответствие,
т. е. Smin соответствует hmax, Smax
соответствует hmin
удаленные элементы имеют меньшее значение h,
приближенные элементы – большее значение h.
2)
яркость
можно связать с h. Что ближе более яркое, что дальше, то более темное.
Обработка h
при непосредственном синтезе изображения.
1.
Инициализируем
поля V, H = 0. Очищаем поле V (например, делаем его черным). В H записываем
минимальное значение, т. е. заполняем его нулями. Минимальные значения
соответствуют максимальной удаленности.
2. Для
пространственного многоугольника определяем точки с координатами (X,Y,Z,S). Для
плоскости изображения используются координаты (x,y,h,v), где v – это яркость в
точке.
3. Используем
алгоритм построчного сканирования.
h и v – линейно интерполируем
Обработка текущей точки:
а) точка вдали
;
б) точка в близи
Пример:
Пусть,
а)
точка в дали
ошибка по глубине
б) точка вблизи
При малоразрядном буфере отношение Smin и Smax
уменьшается.
Значение h – нелинейно зависимое разрешение по
глубине от дальности.
Если записывать в G значение S, то нельзя линейно
интерполировать.
Формула нелинейной интерполяции величины S:
Недостатки:
-
Большие
вычислительные затраты на каждую текущую точку;
-
S
имеет равномерную (т. е. постоянную) разрешающую способность по глубине;
-
Вместо
линейной - нелинейная интерполяция.