Удаление невидимых линий и поверхностей
Задача удаления невидимых линий и поверхностей(УНЛиП) перекрывающихся объектов является одной из наиболее сложных в компьютерной графике.
Алгоритмы удаления невидимых линий и поверхностей определяют ребра, поверхности или объемы, которые невидимы для наблюдателя, находящегося в заданной точке пространства.
Необходимость удаления невидимых линий проиллюстрирована рис. , на котором приведен каркасный чертеж куба. Каркасный чертеж представляет трехмерный объект в виде штрихового изображения его ребер. Этот чертеж можно проинтерпретировать по-разному: как вид куба сверху, слева или снизу. Удаление тех ребер и граней, которые невидимы из соответствующей точки наблюдения, позволяет избавиться от неоднозначности.
Все алгоритмы УНЛиП включают в себя сортировку.
Главная сортировка ведется по геометрическому расстоянию от объекта сцены до точки наблюдения. Основная идея, положенная в основу сортировки по расстоянию, заключается в том, что чем дальше расположен объект от точки наблюдения, тем больше вероятность, что он будет полностью или частично заслонен более близкими к точке наблюдения, т.е. всем объектам сцены присваиваются приоритеты по глубине.
Далее проводится сортировка по горизонтали и по вертикали, чтобы выяснить, будет ли действительно рассматриваемый объект заслонен более близким к точке наблюдения.
Эффективность алгоритма УНЛиП таким образом зависит от эффективности процесса сортировки.
Для повышения эффективности сортировки используется когерентность сцены (тенденция неизменяемости сцены в малом).
Алгоритмы УНЛиП классифицируют по способу выбора системы координат или пространства, в котором они работают.
Алгоритмы, работающие в объектном пространстве.
Алгоритмы, работающие в пространстве изображений.
Алгоритмы, работающие в объектном пространстве, используют систему координат, в которой описаны объекты (МСК). При этом получаются точные результаты, ограниченные лишь точностью вычислений. Полученные изображения можно увеличивать в несколько раз без потери качества.
Алгоритмы, работающие в пространстве изображений , имеют дело с системой координат устройства(экрана), на котором визуализируются объекты. При этом точность вычислений ограничена разрешающей способностью экрана(600х480, 800х600 и 1024х768). Результаты , полученные в пространстве изображений, а затем увеличенные в несколько раз, не будут соответствовать исходной сцене(например, могут не совпасть концы отрезков).
Алгоритмы, формирующие список приоритетов(сортировка по глубине), работают как в ОП, так и в ПИ.
Метод z-буфера
Одним из самых простых алгоритмов удаления невидимых граней и поверхностей является метод z-буфера (буфера глубины). В силу крайней простоты этого метода часто встречаются его аппаратные реализации.
Сопоставим каждому пикселу (х, у) картинной плоскости, кроме цвета, хранящегося в видеопамяти, его расстояние до картинной плоскости вдоль направления проектирования z(x, у) (его глубину). Изначально массив глубин инициализируется + . Для вывода на картинную плоскость произвольной грани она переводится в свое растровое представление на картинной плоскости и для каждого пиксела этой грани находится его глубина. В случае, если эта глубина меньше значения глубины, хранящегося в z-буфере, пиксел рисуется и его глубина заносится в z-буфер.
Замечание
Данный метод работает ucключumeльно в пространстве изображений(картинной плоскости) и не требует никакой предварительной обработки данных . Для вычисления глубины соседних пикселов при растровом разложении грани может использоваться целочисленный вариант алгоритма Брезенхема.
Алгоритмы упорядочения
Метод, использованный ранее зля построения графика фикции двух переменных и заключающийся в последовательном выводе на экран всех граней в определенном порядке, может быть использован и для расчета более сложных сцен.
Подход заключается в таком упорядочении граней, чтобы при их выводе в этом порядке получалось корректное изображение. Для этого необходимо, чтобы более дальние грани выводились раньше, чем более близкие.
Существует различные методы построения такого упорядочения, однако часто встречаются такие случаи, когда заданные грани нельзя упорядочить
(рис.7 ). В подобных случаях необходимо произвести разбиение одной или нескольких граней, чтобы получившееся после разбиения множество граней можно было упорядочить.