Алгоритм Варнока (Warnock)

Алгоритм Варнока является одним из примеров алгоритма, основанного на разбиении картинной плоскости на части, для каждой из которых исходная задача может быть ре­шена достаточно просто.

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

Кратко опишем оригинальную версию алгоритма предложенного Варноком:

Разобьем видимую часть картинной плоскости на четыре равные части и рассмотрим, каким образом могут со­относится между собой проекции граней получившиеся части картинной плоскости.

Возможны четыре различных случая:

Рис. 4.16 Соотношение проекции грани с подокном

1. Проекция грани полностью накрывает область (Рис 5.16d);

2. Проекция грани пересекает область, но не содержится в ней полностью (Рис. 5.16с);

3. Проекция грани целиком содержится внутри области (Рис. 5.16b);

4. Проекция грани не имеет общих внутренних точек с рассматриваемой обла­стью (Рис 5.16a).

Очевидно, что в последнем случае грань вообще никак не влияет на то, что видно в данной области.

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

¨ Проекция ни одной грани не попадает в область;

¨ Проекция только одной грани содержится в области или пересекает об­ласть. В этом случае проекции грани разбивает всю область на две части, одна из кото­рых соответствует этой проекции;

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

Если ни один из рассмотренных трех случаев не имеет места, то снова разбиваем об­ласть на четыре равные части и проверяем выполнение этих условий для каждого из час­тей. Те части, для которых видимость таким об­разом не удалось, разбиваем снова и т. д. (Рис 5.17.)

 

Рис. 4.17 Работа алгоритма Варнока

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

Иногда, для устранения лестничного эффекта, процесс разбиения проводится до разме­ров, меньших, чем раз­решение экрана на один пиксель. При этом усредняются атрибуты подпикселей, чтобы определить атрибуты са­мих пикселей.

При помощи изложенного алгоритма можно удалить либо невидимые линии, либо не­видимые поверхности. Однако простота критерия разбиения, а также негибкость способа разбиения приводят к тому, что количество подразбиений оказывается велико. Можно повысить эффективность этого алгоритма, усложнив способ и крите­рий разбиения. На рис. 5.18а, показан другой общий способ разбиения и дано его сравнение с изложенным ранее жестким способом, представленным на рис. 5.18b.

Рис. 4.18 Способы разбиения окна

Разбиение, показанное на рис. 5.18а, получается с использованием прямоугольной объ­емлющей оболочки мно­гоугольника. Заметим, что подокна при этом могут быть неквад­ратными. Этот способ можно рекурсивно приме­нить к любому многоугольнику, который полностью охвачен каким-нибудь окном или подокном. Если в окне со­держится только один многоугольник и если он целиком охвачен этим окном, то его легко изобразить, не про­водя дальнейшего разбиения. Такой способ разбиения полезен, в частности, при ми­нимизации числа разбиений для простых сцен. Однако с ростом сложности сцены его преимущество сходит на нет.