О (A-B)-C = A-(BuQ.
О (Ли5) - (ЛиС) = Аи(В - С).
О (ЛиЯ)п(ЛиС) = Ап(ВиС).
14.12.4. Как преобразования стекают вниз по Булевому дереву
Рассмотрите дерево на рис. 14.61, а, в котором преобразования поддерживаются в каждом внутреннем узле.
О Докажите или опровергните утверждение, что геометрическая форма, представленная этим деревом, является той же самой, что и для дерева на рис. 14.61, б. Используется ли в этом доказательстве то, что преобразования являются аффинными?
О Если преобразование Tj. с рис. 14.61 представлено в однородных координатах матрицей М., то будет
ли результирующая матрица для куба с рис. 14.61, б равняться МаМ2М3М5 или М5М3М2М0? Подсказка. Докажите, что в общем случае Т(А орг В) = Т(А) орг Т(В), где Т( ) - однозначное преобразование, Л и В - множества точек, а орг - один из операторов п, и, -.
14.12.5. Почему трассировка лучей автоматически обрабатывает объединения?
Объясните, почему трассировка лучей для объединения АиВ двух объектов Л и В (вне зависимости от их взаимопроникновения) эквивалентна их индивидуальной трассировке в сцене?
14.12.6. Сцена как единый CSG-объект
Рассмотрите аргументы «за» и «против» моделирования всей сцены как единого составного объекта в сравнении с использованием списка более простых (но, возможно, также составных) объектов.
14.12.3. Пересечения лучей с Булевыми объектами Нам необходимо разработать метод hit О, работающий с каждым типом Булевых объектов. Этот метод должен формировать внутреннее множество для луча с левым поддеревом, затем с правым поддеревом, после чего корректно объединять эти множества. Скелет такого метода hit() приведен в листинге 14.17 для случая операции пересечения. Прежде всего производятся тесты с экстентами на предмет наличия досрочного выхода (это рассматривается в следующем разделе). Затем вызывается соответствующая
Введение в трассировку лучей
подпрограмма hi t ( )для левого поддерева (которое также может быть Булевым), и если луч не проходит мимо этого поддерева, то формируется список соударений 1 ftlnter. В случае прохождения луча мимо подпрограмма hitO немедленно возвращает false («досрочный выход»), поскольку для соударения с пересечением объектов луч должен соударяться с обоими поддеревьями. После этого формируется второй список соударений rtInter.