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

       

Класс MoleculeWin


Основная функциональность приложения Molecule сосредоточена в классе MoleculeWin:

class MoleculeWin : public RMWin { public: MoleculeWin(); BOOL CreateScene(); protected: //{{AFX_MSG(MoleculeWin) afx_msg void OnDepth1(); afx_msg void OnDepth2(); afx_msg void OnDepth3(); afx_msg void OnDepth4(); afx_msg void OnDepth5(); afx_msg void OnDepth6(); afx_msg void OnChildren1(); afx_msg void OnChildren2(); afx_msg void OnChildren3(); afx_msg void OnChildren4(); afx_msg void OnUpdateChildren1(CCmdUI* pCmdUI); afx_msg void OnUpdateChildren2(CCmdUI* pCmdUI); afx_msg void OnUpdateChildren3(CCmdUI* pCmdUI); afx_msg void OnUpdateChildren4(CCmdUI* pCmdUI); afx_msg void OnUpdateDepth1(CCmdUI* pCmdUI); afx_msg void OnUpdateDepth2(CCmdUI* pCmdUI); afx_msg void OnUpdateDepth3(CCmdUI* pCmdUI); afx_msg void OnUpdateDepth4(CCmdUI* pCmdUI); afx_msg void OnUpdateDepth5(CCmdUI* pCmdUI); afx_msg void OnUpdateDepth6(CCmdUI* pCmdUI); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: BOOL CreateHierarchy(); BOOL CreateChildren(LPDIRECT3DRMFRAME frame, int depth); private: LPDIRECT3DRMMESH mesh[MAXDEPTH]; int curdepth; int numchildren; int framecount; };

В классе объявлены две открытые функции: конструктор и функция CreateScene(). Конструктор применяется для инициализации членов данных класса. Функция CreateScene() создает начальную сцену приложения. Мы познакомимся с ней чуть позже.

Двадцать защищенных функций, являющихся обработчиками событий, установлены с помощью мастера ClassWizard. Эти функции обеспечивают работу меню Depth и Children в приложении.

Кроме того, объявлены две закрытые функции: CreateHierarchy() и CreateChildren(). Функция CreateHierarchy() отвечает за создание иерархии фреймов, соответствующей текущим параметрам приложения. Она вызывается при запуске программы и каждый раз, когда пользователь изменяет параметры иерархии фреймов.

При создании иерархии функция CreateHierarchy() использует функцию CreateChildren(). Функция CreateChildren() является рекурсивной функцией, добавляющей дочерние фреймы к существующему фрейму.

И, наконец, в классе объявлены три переменных:

LPDIRECT3DRMMESH mesh[MAXDEPTH]; int curdepth; int numchildren;

Переменная mesh представляет собой массив указателей на интерфейс Direct3DRMMesh. Мы будем использовать этот массив, чтобы хранить сетки для фреймов каждого из уровней глубины иерархии. Приложение создает шесть сеток— по одной для каждой глубины. Когда сетка присоединяется к нескольким фреймам, на экране отображается несколько ее экземпляров.

Переменные curdepth и numchildren хранят текущие параметры иерархии. Они модифицируются обработчиками событий команд меню Depth и Children, и используются в функциях CreateHierarchy() и CreateChildren(). Инициализация этих переменных выполняется конструктором класса MoleculeWin, код которого выглядит так:

MoleculeWin::MoleculeWin() { curdepth=4; numchildren=2; }



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