Рис. 13.15. Охватывающая грань лежит ближе Как же проверить, что охватывающая грань является повсюду ближайшей (к глазу) внутри подобласти R? Требуется проверить ее глубину только в четырех углах R и сравнить с глубинами плоскостей всех остальных втянутых граней в этих же углах. Если охватывающая грань является ближайшей во всех четырех углах, то ни одна из других втянутых граней не может перекрыть ее.
В процессе просмотра списка граней faces мы помечаем все охватывающие грани перед занесением их в список outFaces. После того как все грани протестированы, мы проверяем глубины охватывающих граней и выбираем ту из них, которая ближе всех остальных. (Она не всегда существует - почему?) После этого мы тестируем «победившую» грань относительно плоскостей всех оставшихся граней из списка faces. Если там есть «победившая» охватывающая грань, то визуализация области R производится в соответствии с цветом ее поверхности и никаких дальнейших разбиений не требуется. В противном случае рекурсивно проходится список outFaces, как и ранее. Отметим, что охватывающие грани, помеченные в списке outFaces, не нуждаются в повторном тестировании после следующего разбиения, так как они, несомненно, остаются охватывающими.
При использовании данного определения простоты осуществляется явный компромисс между сложностью, состоящей в тестировании каждой грани, и необходимостью дополнительных циклов
Удаление невидимых поверхностей
разбиения. Для каждой области требуется проводить гораздо больше тестов - в надежде, что понадср бится тестировать намного меньшее их количество (поскольку будет меньше разбиений).
Практические упражнения
13.5.1. Ручная имитация алгоритма Варнока Пусть равнобедренный прямоугольный треугольник точно вписан в квадратную область. Проделайте для такой ситуации ручную имитацию операции Region "opengl1_902.html">⇐ Предыдущая| |Следующая ⇒