Перед началом просмотра по z поперек строки развертки всем элементам массива covered[] присваиваются начальные значения false, а счетчик numCovered обнуляется. В нашем примере пикселы от х - О до х - х{ не покрывает ни одна грань, поэтому применяется цвет фона. В точке х{ достигается грань В, поэтому covered[B] устанавливается в true, a numCovered устанавливается в 1. Глубина каждой покрываю13.4. HSR-метод построчного сканирования щей грани в текущем пикселе хранится в новом поле ШБОерт-п узлов граней. Начальное значение этого поля устанавливается в соответствии с глубиной точки первого пересечения с данной строкой развертки. При каждом последующем значении х глубина может только увеличиться на постоянную величину аерг.пТ.пс, подобно тому, как это делалось в методе буфера глубины в главе 8. При этих инкрементных вычислениях глубины используется связность глубин - возможность легко вычислить глубину точки на грани по глубинам соседних с ней точек на той же грани.

Пример списка активных ребер для строки развертки

Рис. 13.12. Пример списка активных ребер для строки развертки При перемещении от х - х1 до х - х2 грань В является единственной покрывающей гранью, поэтому каждый из ее пикселов может быть закрашен в соответствии с подходящим правилом закраски. Согласно этому правилу, закраска всей серии от х1 до х2 может быть произведена за один прием.

В точке х2 появляется грань А, определяется ее глубина; счетчик питСоуегес! становится равным 2; соуегегДА] устанавливается в Ше. Продвигаясь вперед по списку активных ребер, процедура узнает, что от х2 до х3 пикселы покрываются только двумя гранями, поэтому для каждого пиксела ближайшая грань может быть определена простым сравнением их глубин. Если вначале ближайшей гранью является грань А, то нет никакой гарантии, что так и будет все время; дело в том, что грани могут оказаться взаимопроникающими. Это можно проверить, вычислив две глубины в точке *3. Если порядок глубин остается неизменным вдоль серии до х3, то всю серию можно закрашивать так, как если бы была только одна покрывающая грань. В точке х3 грань В перестает быть покрывающей, поэтому цвет пиксела определяется просто. (Как?) В точке хА начинает покрывать грань С, поэтому необходимо определить соотношения глубин граней А и С.


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