Вспомогательный
класс
Нам вновь,
как и в предыдущем уроке, понадобится класс, инкапсулирующий функциональность
точки трехмерного пространства 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()