Строка у2 обрабатывается аналогичным образом (проекции граней для данной строки не пересекаются).

Обрабатывая строку у3, мы сталкиваемся с перекрывающимися гранями. При прохождении через ребро AB флаг грани ABC инвертируется, и отрезок до пересечения со следующим ребром (DF) соответствует этой грани. При прохождении ребра DF флаг грани DEF также инвертируется и мы оказываемся сразу в двух гранях (обе грани проектируются на этот участок). Чтобы определить, какая из них видна, необходимо сравнить глубины обеих граней в этой точке; в данном случае грань DEF ближе и поэтому отрезок закрашивается цветом этой грани. При прохождении через ребро ВС флаг грани ABC сбрасывается в нуль и мы опять оказываемся внутри только одной грани. Поэтому следующий отрезок до пересечения с ребром EF будет принадлежать грани DEF.

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

Грани не имеют внутренних пересечений, поэтому при выходе из невидимой грани нет смысла проверять видимость, так как порядок граней измениться не мог -при пересечении ребра ВС видимой по-прежнему остается грань ОЕ¥ (рис. 10.40).

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

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


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