Программирование графики с использованием Direct3D

       

Иерархия фреймов


Сцена Direct3D определяется как иерархия фреймов. Каждая сцена содержит корневой фрейм и произвольное число дочерних фреймов, присоединенных к корневому. Каждый дочерний фрейм может в свою очередь иметь собственные дочерние фреймы. Фреймы представлены интерфейсом Direct3DRMFrame и создаются функцией CreateFrame() интерфейса Direct3DRM.

LPDIRECT3DRMFRAME newframe; d3drm->CreateFrame(parentframe, &newframe);

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

Дочерние фреймы наследуют свои характеристики от родительских. Одной из наследуемых характеристик является система координат. Дочерние фреймы присоединяются к родительскому таким образом, что они следуют за ним — при перемещении родительского фрейма перемещаются и дочерние. Это позволяет создавать сложную анимацию частей объекта. Например, если вы хотите создать и анимировать вертолет (с вращающимися лопастями, разумеется), вы можете создать фрейм для корпуса вертолета, а затем создать дочерний фрейм для лопастей. Для анимации лопастей можно задать вращение для фреймов, к которым привязаны лопасти. Для анимации корпуса вертолета можно перемещать и изменять ориентацию фрейма к которому присоединен корпус. Поскольку фреймы лопастей являются дочерними по отношению к фрейму корпуса, они будут совершать те же перемещения, что и корпус.

В качестве системы отсчета фреймы могут использовать не только свой родительский фрейм. Многие функции позволяют указать, какой фрейм должен использоваться в качестве системы отсчета независимо от отношений «родитель-потомок». Гибкость иерархии фреймов — одна из причин исключительной мощности абстрактного режима Direct3D.



Содержание раздела