Вспомогательный класс
Нам вновь, как и в предыдущем уроке, понадобится класс, инкапсулирующий функциональность точки трехмерного пространства CPoint3D. Контейнер объектов этого класса будет хранить вершины изображаемой поверхности. В коде, который приведен ниже, присутствует слегка измененное по сравнению с предыдущим объявление класса CPoint3D, а также объявления новых данных и методов класса cocview. Заодно мы произвели упрощения стартового кода, которые обсуждались в уроке 5.
Весь код введите в файл OGView.h вместо существующей в нем заготовки. Файл должен приобрести следующий вид:
# pragma once //========== Вспомогательный класс class CPoint3D { public: //====== Координаты точки float x; float у; float z; //====== Набор конструкторов CPoint3D () { х = у – z = 0.f; } CPoint3D (float cl, float c2, float c3) { x = cl; z = c2; У = сЗ;, } //====== Операция присвоения CPoint3DS operator= (const CPointSDS pt) x = pt.x; z = pt.z; return *this; У = pt.y; //====== Конструктор копирования CPoint3D (const CPoint3D& pt) { *this = pt; //=========== Класс окна OpenGL class COGView: public CView { protected: COGView (); DECLARE_DYNCREATE(COGView) public: virtual ~COGView(); virtual void OnDraw(CDC* pDC); virtual BOOL PreCreateWindow(CREATESTRUCT& cs), //======= Новые данные класса long m_BkClr; // int m_LightParara[ll]; // HGLRC m_hRC; // HDC m_hdc; // GLfloat m_AngleX; // GLfloat m_AngleY; // GLfloat m_AngleView; // GLfloat m_fRangeX; // GLfloat m_fRangeY; // GLfloat m_fRangeZ; // GLfloat m_dx; // GLfloat m_dy; // GLfloat m_xTrans; // GLfloat m_yTrans; // GLfloat m_zTrans; // GLenura m_FillMode; // bool m_bCaptured; // bool m_bRightButton; // bool m_bQuad; // CPoint m_pt; // UINT m_xSize; // UINT m_zSize; // //====== Массив вершин поверхности vector <CPoint3D> m_cPoints; //====== Новые методы класса //=-==== Подготовка изображения void DrawScene();
Цвет фона окна Параметры освещения Контекст OpenGL Контекст Windows Угол поворота вокруг оси X Угол поворота вокруг оси Y Угол перспективы Размер объекта вдоль X Размер объекта вдоль Y Размер объекта вдоль Z Квант смещения вдоль X Квант смещения вдоль Y Смещение вдоль X Смещение вдоль Y Смещение вдоль Z Режим заполнения полигонов Признак захвата мыши Флаг правой кнопки мыши Флаг использования GL_QUAD Текущая позиция мыши Текущий размер окна вдоль X Текущий размер окна вдоль Y
//====== Создание графика по умолчанию void DefaultGraphic(); //====== Создание массива по данным из буфера void SetGraphPoints(BYTE* buff, DWORD nSize); //====== Установка параметров освещения void SetLight(); //====== Изменение одного из параметров освещения void SetLightParam (short lp, int nPos); //====== Определение действующих параметров освещения void GetLightParams(int *pPos); //====== Работа с файлом данных void ReadData(); //====== Чтение данных из файла bool DoRead(HANDLE hFile); //====== Установка Работа с файлом данных void SetBkColor(); DECLARE MESSAGE MAP()