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

         

Класс SpotlightWin


Приложение Spotlight использует класс RMWin в качестве базового для своего собственного класса SpotlightWin:

class SpotlightWin : public RMWin { public: SpotlightWin(); BOOL CreateScene(); protected: //{{AFX_MSG(SpotlightWin) afx_msg void OnRenderWireframe(); afx_msg void OnRenderFlat(); afx_msg void OnRenderGouraud(); afx_msg void OnUpdateRenderFlat(CCmdUI* pCmdUI); afx_msg void OnUpdateRenderGouraud(CCmdUI* pCmdUI); afx_msg void OnUpdateRenderWireframe(CCmdUI* pCmdUI); afx_msg void OnBeamNormal(); afx_msg void OnBeamNarrow(); afx_msg void OnBeamWide(); afx_msg void OnUpdateBeamNormal(CCmdUI* pCmdUI); afx_msg void OnUpdateBeamNarrow(CCmdUI* pCmdUI); afx_msg void OnUpdateBeamWide(CCmdUI* pCmdUI); //}}AFX_MSG DECLARE_MESSAGE_MAP() private: static void MoveLight(LPDIRECT3DRMFRAME frame, void* arg, D3DVALUE delta); private: LPDIRECT3DRMMESH mesh1, mesh2, mesh3; LPDIRECT3DRMLIGHT spotlight; int beamwidth; };

Определение класса SpotlightWin слегка отличается от определений классов других демонстрационных программ, рассмотренных в этой главе. Первым и основным отличием является большее число защищенных функций. Шесть защищенных функций подобны тем, которые используются в других демонстрационных программах, и предназначены для реализации меню Render. Новые функции, которые мы рассмотрим чуть позже, предназначены для реализации меню Beam.

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

Члены данных класса также отличаются. В предыдущих демонстрационных программах использовался единственный указатель на интерфейс Direct3DRMMeshBuilder. В классе SpotlightWin объявлены три указателя на интерфейс Direct3DRMMesh. Эти три указателя применяются для доступа к трем, используемым в приложении сферическим сеткам.

В классе также объявлен указатель на интерфейс Direct3DRMLight. Этот указатель используется функциями, обрабатывающими команды меню Beam. Кроме того, эти функции используют переменную класса beamwidth для хранения текущих параметров прожектора.



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