Нам вновь, как и в предыдущем уроке, понадобится
класс, инкапсулирующий функциональность точки
трехмерного пространства CPoint3D. Контейнер
объектов этого класса будет хранить вершины
изображаемой поверхности. В коде, который
приведен ниже, присутствует слегка измененное по
сравнению с предыдущим объявление класса
CPoint3D, а также объявления новых данных и
методов класса cocview. Заодно мы произвели
упрощения стартового кода, которые обсуждались в
уроке 5. Весь код введите в файл OGView.h вместо
существующей в нем заготовки. Файл должен
приобрести следующий вид1:
#pragma
once
//========== Вспомогательный класс
class
CPointSD
{
public: //======
Координаты точки
float
x;
float
у;
float
z;
//====== Набор конструкторов
CPointSD ()
{
х = у - 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;
//====== Конструктор копирования
CPointSD (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() |