Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по КГГ полное2.doc
Скачиваний:
39
Добавлен:
17.09.2019
Размер:
2.49 Mб
Скачать

4.7.1.Алгоритм Ньюэла-Ньюэла-Санча для случая многоугольников

Сформировать предварительный список приоритетов по глубине, используя в качестве ключа сортировки зна­чение zmin для каждого многоугольника. Первым в списке будет многоугольник с минимальным значением zmin. Этот многоугольник лежит дальше всех от точки наблюдения, расположенной в бесконечности на положительной полуоси z. Обозначим его через P, а следующий в списке многоугольник - через Q. Для каждого многоугольника P из списка надо проверить его отношение с Q.

Если ближайшая вершина Р (Pzmax) будет дальше от точки наблюдения, чем самая уда­ленная вершина Q (Qzmin), т. е. Qzmin Pzmax никакая часть P не может экранировать Q. За­нести Р в буфер кадра (рис. 5.13а).

Если Qzmin < Pzmax, то Р потенциальное экранирует не только Q, но также и любой дру­гой многоугольник типа Q из списка, для которого Qzmin < Pzmax. Тем самым образуется множество {Q}. Однако Р может фактически и не эк­ранировать ни один из этих много­угольников. Если последнее верно, то Р можно заносить в буфер кадра. Для от­вета на этот вопрос используется серия тестов, следующих по возрастанию их вычислительной сложности. Эти тесты ниже формулируются в виде вопросов. Если ответ на любой во­прос будет положительным, то Р не может экранировать {Q}. Поэтому Р сразу же зано­сится в буфер кадра. Вот эти тесты:

  • Верно ли, что прямоугольные объемлющие оболочки Р и Q не перекрыва­ются по х?

  • Верно ли, что прямоугольные оболочки Р и Q не перекрываются по у?

  • Верно ли, что Р целиком лежит по ту сторону плоскости, несущей Q, которая расположена дальше от точки на­блюдения (рис. 5.15а)?

  • Верно ли, что Q целиком лежит по ту сторону плоскости, несущей P, которая ближе к точке наблюдения (рис. 5.15b)?

  • Верно ли, что проекции Р и Q не перекрываются?

Рис. 4.65 Тесты для перекрывающихся многоугольников

Каждый из этих тестов применяется к каждому элементу {Q}. Если ни один из них не дает положительного от­вета и не заносит Р в буфер кадра, то Р может закрывать Q.

Поменять Р и Q местами, пометив позицию Q в списке. Повторить тесты с новым спи­ском. Это дает положительный результат для сцены с рис. 5.13b.

Если сделана попытка вновь переставить Q, значит, обнаружена ситуация циклического экранирования (рис. 5.14). В этом случае Р разрезается плоскостью, несущей Q, исход­ный многоугольник Р удаляется из списка, а его части заносятся в список. Затем тесты повторяются для нового списка. Этот шаг предотвращает зацикливание ал­горитма.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]