8.8. Граф сцены

Поскольку методы программирования обхода дерева в графической программе уже были описаны выше, нам остается только задуматься над изменением структуры описания узла. Помимо матрицы преобразования экземпляра и указателя на функцию отображения объекта в нее необходимо включить еще и разнообразные атрибуты объекта. Но есть и другой вариант- включить в дерево узлы новых типов, один из которых будет определять атрибуты, а другой - матрицы преобразования. Рассмотрим дерево (рис. 8.18), в котором присутствуют отдельные узлы цвета, матриц вида и специальные узлы разветвления. Узлы разветвления служат для программы обхода своего рода "дорожными знаками", указывающими, что в этом месте нужно сохранить текущее состояние и таким образом изолировать состояние поддерева, которое начинается после этого узла, от остального дерева. OpenGL-программа обхода дерева, в которой используется метод прямого обхода, будет выглядеть примерно так:

glPushAttrib
glPushMatrix
glColor
glTranslate
glRotate
objectif)
glTranslate
object2()
glPopMatrix
glPushMatrix
glTranslate
glRotate
object3()
glPopMatrix
glPopAttrib

Узлам-разделителям в этом фрагменте соответствуют вызовы функций glPushMatrix ( ) и glPopMatrix ( ). При входе в этот фрагмент текущие атрибуты и матрица вида сохраняются, а перед завершением программы они восстанавливаются. Программа устанавливает цвет, который используется при формировании образов всех прочих объектов сцены, и обходит дерево примерно так же, как это делалось в рассмотренном выше примере отображения фигурки киборга.

Дерево сцены

Рис. 8.18. Дерево сцены

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


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