drawFacet (tree -> facet);
if (tree -> left != NULL )
drawBSPTree (tree -> left);
}
else
{
if (tree -> left != NULL)
drawBSPTree (tree -> left);
drawFacet (tree -> facet);
if (tree -> right != NULL )
drawBSPTree (tree -> right);
}
}

Приведенная процедура осуществляет вывод граней в порядке back-to-front. Эту процедуру можно модифицировать для вывода только лицевых граней. Несложно также скорректировать ее и для работы с параллельным проектированием.

Если необходимо выводить грани в обратном порядке (front-to-back), то отработку левого и правого поддеревьев следует поменять местами. Но тогда потребуется механизм отслеживания уже заполненных пикселов экрана.

Как только все пикселы будут заполнены, рекурсивный обход дерева можно прекратить.

Одним из основных преимуществ этого метода является полная независимость дерева от параметров проектирования (положение центра проектирования, направление проектирования и др.), что делает его весьма удобным для построения серий изображений одной и той же сцены из разных точек наблюдения. Это обстоятельство привело к тому, что BSP-деревья стали широко использоваться в ряде систем виртуальной реальности. В частности, удаление невидимых граней в широко известных играх DOOM, Quake и Quake II основано на привлечении именно BSP-деревьев.

В ряде случаев удобнее строить дерево, листьями которого будут не грани, а выпуклые многогранники, - порядок, в котором выводятся лицевые грани выпуклых Многогранников, может быть произволен и никакого влияния на конечный результат не оказывает. Причем BSP-дерево используется только для упорядочивания этих многогранников, а уже упорядочивание граней внутри каждого из них осуществляется другим способом.

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

Компьютерная графика. Полигональные модели


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