В случае, когда оба эти теста дали утвердительный ответ, проводятся следующие тесты.

3. Находится ли грань Р по другую сторону от плоскости, проходящей через грань <2, относительно наблюдателя (рис. 2.16)?

4. Находится ли грань <2 по ту же сторону от плоскости, проходящей через грань Р, по которую находится и наблюдатель (рис. 2.17)?

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

В случае, если ни один из тестов не подтвердил правильность упорядочения граней Р и <2, проверяем, не следует ли поменять эти грани местами. Для этого проводятся тесты, являющиеся аналогами тестов 3 и 4 (очевидно, что снова проводить тесты 1 и 2 не имеет смысла):

3'. Находятся ли грань <2 и наблюдатель по разные стороны от плоскости, проходящей через грань Р?

4'. Находится ли грань Р по ту же сторону от плоскости, проходящей через грань (), по которую находится и наблюдатель?

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

Возможны ситуации, когда, несмотря на то что грани Р и () упорядочены верно, их разбиение все же будет произведено (алгоритм создает избы-

Удаление невидимых поверхностей

точные разбиения). Подобный случай изображен на рис. 2.18, где для каждой вершины указана ее глубина.

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


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