Заметим, что изменение видимости отрезков может происходить лишь в их концах. Поэтому достаточно проанализировать взаимное расположение концов отрезков с учетом глубины. Один из вариантов такого подхода использует специальные таблицы для отслеживания концов отрезков:

таблица ребер (Edge Table), где для каждого негоризонтального ребра (горизонтальные ребра игнорируются) хранятся минимальная и максимальная у-коор динаты, л-координата, соответствующая вершине с наименьшей у-координатой,

10. Удаление невидимых линий и поверхностей шаг изменения л" при переходе к следующей строке и ссылка на соответствующую грань;

таблица граней (Facet Table), где для каждой грани помимо информации о плоскости, проходящей через эту грань, и информации, необходимой для ее закрашивания, хранится также специальный флажок, устанавливаемый в нуль при обработке очередной строки;

таблица активных ребер (Active Edge Table), содержащая список всех ребер, пересекаемых текущей сканирующей плоскостью, и проекции точек пересечения

- (л'-координаты при параллельном проектировании). Все ребра в таблице активных ребер сортируются по возрастанию х.

Для удобства определения ребер, пересекаемых текущей сканирующей плоскостью, список всех ребер обычно сортируется по наименьшей ^-координате.

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

У]

AB, АС

У2

AB, АС, FD, FE

Уз

AB, DE, ВС, FE

У4

AB, DE, ВС, FE

У5

AB, ВС, DE, FE

Ребра из списка активных ребер обрабатываются по мере увеличения х.

При обработке линии у{ таблица активных ребер состоит только из двух ребер -AB и АС. Первым обрабатывается ребро AB, при этом флаг соответствующей грани (ABC) инвертируется. Тем самым мы "входим" в эту грань, т. е. следующая группа пикселов является проекцией этой грани.

Поскольку в данной строке пересекается лишь одна грань, то очевидно, что она является видимой и, значит, весь отрезок между точками пересечения секущей плоскости с ребрами AB и ВС необходимо закрасить в цвета этой грани. При обработке следующего отрезка флаг грани ABC снова инвертируется и становится равным нулю - мы выходим из этой грани.


⇐ Предыдущая| |Следующая ⇒