Класс C3DAnimation
Для программы D3D_AnimationClass я создал класс содержащий всю информацию, необходимую для создания, редактирования, сохранения, загрузки и воспроизведения анимации. Все это может показаться довольно сложным, но поиграйте немного с примером, и окажется, что все не так уж и плохо. Взгляните на рис. 11.19, иллюстрирующий определение класса.

Рис. 11.19. Структура класса C3DAnimation
На рисунке методы класса сгруппированы согласно их назначению. Например, сгруппированы все функции, относящиеся к работе с кадрами. Перед тем, как описывать функции, я приведу код заголовка класса:
const int g_iMaxObjects = 16; const int g_iMaxKeys = 1024;
struct stKeyFrame { D3DXVECTOR3 m_vecRot; D3DXVECTOR3 m_vecTrans; D3DXVECTOR3 m_vecScale; long m_lTimeDelay; };
class C3DAnimation { public: stKeyFrame *m_keyFrames[g_iMaxObjects][g_iMaxKeys]; Object3DClass *m_objObject[g_iMaxObjects]; char m_szObjectName[g_iMaxObjects][32]; int m_iNumFrames; int m_iNumObjects; char m_szAnimName[64]; int m_iCurFrame; long m_lCurTime; LPDIRECT3DDEVICE9 m_pd3dDevice; C3DAnimation(); ~C3DAnimation(); void vNewFrame(void); int iNextFrame(void); int iPrevFrame(void); int iStartFrame(void); int iNewObj(char *szObjName); void vUpdateTrans(int iObj, int iKey, D3DXVECTOR3 vecTrans); void vUpdateRot(int iObj, int iKey, D3DXVECTOR3 vecRot); void vUpdateScale(int iObj, int iKey, D3DXVECTOR3 vecScale); void vSave(char *szFileName); void vLoad(char *szFileName); void vSet3DDevice(LPDIRECT3DDEVICE9 pd3dDevice); void vReset(void); };