Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Shpory_3D-mod.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
10.94 Mб
Скачать

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

Алгоритм плавающего горизонта используется чаще всего для удаления невидимых линий трехмерных объектов, поверхности которых описаны в виде:

.

Подобные функции возникают во многих приложениях в математике, технике, естественных науках.

Трехмерная задача сводится к двумерной путем пересечения исходной поверхности последовательностью параллельных секущих плоскостей, имеющих постоянные значения координат x, y или z, (рис. 12.10).

Рис. 12.10 Параллельные секущие плоскости

На рисунке показаны параллельные плоскости с . Функция сводится к последовательности кривых, лежащих в каждой из этих параллельных плоскостей, например, к последовательности:

,

где на каждой из заданных параллельных плоскостей.

Поверхность теперь складывается из последовательности кривых, лежащих в каждой из этих плоскостей (рис. 12.11).

Рис. 12.11 Последовательность кривых поверхности

При проецировании кривых на плоскость z=0 (рис. 12.11) становится ясна идея алгоритма:

В начале происходит упорядочивание плоскостей по возрастанию расстояния до них от точки наблюдения.

Для каждой плоскости, начиная с ближайшей к точке наблюдения, строится кривая, лежащая на ней, то есть для каждого значения x в пространстве изображения определяется соответствующее y.

Проводится проверка: если на текущей плоскости при некотором значении x соответствующее значение y на кривой больше максимального или меньше минимального по y для всех предыдущих кривых при этом x, то текущая кривая видима, иначе — нет (рис. 12.12).

Рис. 12.12 Реализация алгоритма

Реализация алгоритма достаточна проста. Для хранения максимальных и минимальных значений y при каждом значении x используются два массива, длина которых равна разрешению по x. Значения в этих массивах представляют собой текущие значения верхнего и нижнего плавающего горизонта. По мере рисования каждой очередной кривой этот горизонт «всплывает».

Фактически этот алгоритм работает каждый раз с одной линией.

12.8. Алгоритм трассировки лучей

Алгоритм трассировки лучей относится к алгоритмам, работающим в объектном пространстве. Он является частью общей трассировки лучей, решающей самые разнообразные задачи на пути получения реалистичного изображения.

Предполагается, что наблюдатель находится на положительной полуоси Z, а экран дисплея перпендикулярен оси Z и располагается между объектом и наблюдателем.

Удаление невидимых (скрытых) поверхностей в алгоритме трассировки лучей выполняется следующим образом:

— сцена преобразуется в пространство изображения,

— из точки наблюдения в каждый пиксел экрана проводится луч и определяется, какие именно объекты сцены пересекаются с лучом,

— вычисляются и упорядочиваются по Z координате точек пересечения объектов с лучом. В простейшем случае для непрозрачных поверхностей без отражений и преломлений видимой точкой будет точка с максимальным значением Z-координаты. Для более сложных случаев требуется сортировка точек пересечения вдоль луча.

Ясно, что наиболее важная часть алгоритма — процедура определения пересечения, которая в принципе выполняется RxRyN раз (здесь Rx, Ry — разрешение дисплея по Х и Y, соответственно, а N — количество многоугольников в сцене).

Очевидно, что повышение эффективности может достигаться сокращением времени вычисления пересечений и избавлением от ненужных вычислений. Последнее обеспечивается использованием геометрически простой оболочки, заключающей объект — если луч не пересекает оболочку, то не нужно вычислять пересечения с ним многоугольников, составляющих исследуемый объект.

При использовании прямоугольной оболочки определяется преобразование, совмещающее луч с осью Z. Оболочка подвергается этому преобразованию, а затем попарно сравниваются знаки Хmin с Хmax и Уmin с Уmax. Если они различны, то есть пересечение луча с оболочкой (рис. 12.12)

Рис. 12.13. Определение пересечения луча и оболочки

При использовании сферической оболочки для определения пересечения луча со сферой достаточно рассчитать расстояние от луча до центра сферы. Если оно больше радиуса, то пересечения нет. Параметрическое уравнение луча, проходящего через две точки Р1(х1,у1,z1) и Р2(х2,у2,z2), имеет вид:

Минимальное расстояние от точки центра сферы Р0(х0,у0,z0) до луча равно:

Этому соответствует значение t:

Если d2>R2, то луч не пересекает объекты, заключенные в оболочку.

Дальнейшее сокращение расчетов пересечений основывается на использовании групп пространственно связанных объектов. Каждая такая группа окружается общей оболочкой. Получается иерархическая последовательность оболочек, вложенная в общую оболочку для всей сцены. Если луч не пересекает какую-либо оболочку, то из рассмотрения исключаются все оболочки, вложенные в нее и, следовательно, объекты. Если же луч пересекает некоторую оболочку, то рекурсивно анализируются все оболочки вложенные в нее.

Наряду с вложенными оболочками для сокращения расчетов пересечений используется отложенное вычисление пересечений с объектами. Если обнаруживается, что объект пересекается лучом, то он заносится в специальный список пересеченных. После завершения обработки всех объектов сцены объекты, попавшие в список пересеченных, упорядочиваются по глубине. Заведомо невидимые отбрасываются, а для оставшихся выполняется расчет пересечений, и отображается точка пересечения, наиболее близкая к наблюдателю.

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

Для сокращения времени вычислений собственно пересечений предложено достаточно много алгоритмов, упрощающих вычисления для определенной формы задания поверхностей.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]