Надо учитывать, что при движении над рельефом наблюдатель приподнят на высоту h.
Z(x,y) – Функция рельефа
P(XP,YP,ZP) – положение наблюдателя
Тогда в плане получим:
Таким образом, получаем следующие координаты наблюдателя с учетом того, что он приподнят над рельефом.
Реальность картинке придаёт линия горизонта. В случае отсутствия тангажа (наклон отрезка PL(наблюдателя)) и крена линия горизонта является горизонтальной. Расположить ее можно либо строго по середине, либо искусственно приподнять или опустить.
В случае наличия крена линия горизонта будет повернута на некоторый угол (в зависимости от угла крена). При наличии тангажа линия будет смещаться либо вниз, либо вверх. Таким образом, линия горизонта, нарисованная с учетом крена при наличии тангажа, смещается параллельно самой себе. Необходимо рассчитать точки у1 и у2 (их координаты).
Можно также интерполировать яркость закраски «неба» и «земли», прорисовывать отдельные элементы рельефа.
Удаление невидимых элементов трехмерных объектов.
Рисование рельефа.
Существует несколько алгоритмов:
1) Алгоритм художника. Прорисовка начинается с заднего плана, если последующий объект не может заслоняться предыдущим. (рис 1)
2) Делим поле рельефа на сектора. В каждом секторе применяем первый алгоритм. (рис. 2)
3) Алгоритм с использованием буфера глубины. Синтез изображения в общем случае: алгоритм с использованием буфера глубины.
Суть метода: кроме плоскости изображения резервируем память, точно соответствующую объему изображения, а в буфер глубины записываем величину (g) равную удаленности точки объекта от наблюдателя. При обработки любой точки сравниваем удаленность точки с величиной, хранимой в буфере. В буфер глубины можно записывать Евклидово расстояние.
Можно восстановить пространственную координату и посчитать R для любой точки (нужно для прорисовки отрезка на поле изображения).
Если в буфер глубины записываем Евклидово расстояние, то получится:
В результате интерполяции Евклидово расстояние это середина отрезка. В буфер G записывать величину R при линейной интерполяции нельзя. Глубину (S) тоже нельзя записывать в буфер глубины, т. к. ее нельзя будет линейно интерполировать. Но в буфер глубины можно записать параметр глубины (h),т. к. h может быть линейно интерполирована в плоскости изображения.
, где A и B – любые числа
Для величины h вводим буфер глубины H. H-буфер – это некоторая область памяти. Она имеет разрядность. Размер этой области равен размеру изображения.
при ; Smax – задний план
Все что находится за Smax и перед Smin отсекается. Пирамида видимости – это пространственная пирамида (все что находится в ней попадает в поле видимости). Если объект находится за пределами пирамиды видимости, то он не изображается.
h обладает рядом достоинств:
1) соответствие, т. е. Smin соответствует hmax, Smax соответствует hmin
удаленные элементы имеют меньшее значение h, приближенные элементы – большее значение h.
2) яркость можно связать с h. Что ближе более яркое, что дальше, то более темное.