Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по КГ.doc
Скачиваний:
5
Добавлен:
27.04.2019
Размер:
1.17 Mб
Скачать

Трехмерное отсечение. Обобщение

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

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

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

F(x,y,z) = 0

Поскольку в приложениях в основном интересуются описанием поверхности, этот алгоритм обычно работает в пространстве изображения. Главная идея данного метода заключается в сведении трехмерной задачи к двумерной путем пересечения исходной поверхности последовательностью параллельных секущих плоскостей, имеющих постоянные значения координат x, y или z. Например, если указанные параллельные плоскости определяются постоянными значениями z. Функция F(x,у,z) = 0 сводится к последовательности кривых, лежащих в каждой из этих параллельных плоскостей, например к последовательности y = f(x,z) или х = g(y,z), где z постоянно на каждой из заданных параллельных плоскостей.

Итак, поверхность теперь складывается из последовательности кривых, лежащих в каждой из этих плоскостей. Здесь предполагается, что полученные кривые являются однозначными функциями независимых переменных. Если спроецировать полученные кривые на плоскость z = 0, то сразу становится ясна идея алгоритма удаления невидимых участков исходной поверхности. Алгоритм сначала упорядочивает плоскости z = const по возрастанию расстояния до них от точки наблюдения. Затем для каждой плоскости, начиная с ближайшей к точке наблюдения, строится кривая, лежащая на ней, т. е. для каждого значения координаты х в пространстве изображения определяется соответствующее значение y. Алгоритм удаления невидимой линии заключается в следующем:

Если на текущей плоскости при некотором заданном значении х соответствующее значение y на кривой больше значения y для всех предыдущих кривых при этом значении х, то текущая кривая видима в этой точке; в противном случае она невидима. Алгоритм работает очень хорошо до тех пор, пока какая-нибудь очередная кривая не окажется ниже самой первой из кривых. Подобные кривые, естественно, видимы и представляют собой нижнюю сторону исходной поверхности, однако алгоритм будет считать их невидимыми. Нижняя сторона поверхности делается видимой, если модифицировать этот алгоритм, включив в него нижний горизонт, который опускается вниз по ходу работы алгоритма. Это реализуется при помощи второго массива, длина которого равна числу различимых точек по оси х в пространстве изображения. Этот массив содержит наименьшие значения y для каждого значения х. Алгоритм теперь становится таким: Если на текущей плоскости при некотором заданном значении х соответствующее значение y на кривой больше максимума или меньше минимума по y для всех предыдущих кривых при этом х, то текущая кривая видима. В противном случае она невидима.