void InitGraph(HWND hWnd) {

StartOpenGKhWnd.&hGLRC) ; InitLight(pos,inten,intenl); InitMaterialО : }

void DestroyGl(HWND hWnd) // Завершение работы с OpenGL {

if (hGLRC) {
wglMakeCurrent(NULL. NULL);
wglDeleteContext(hGLRC);
}
ReleaseDC(hWnd.wglGetCurrentDC()); }

В проект добавлены новые модули GLDat.h и GLDat.cpp, в которых для вывода изображения глобуса реализованы классы GRIDBALL и GLOBE. Класс GRIDBALL позволяет определить радиус шара, шаг сетки меридианов и параллелей и создать двумерный массив вершин, задающих координаты, направление нормалей и цвет в узлах сетки. Методы класса GLOBE предназначены для масштабирования, переноса и вывода построенного по данным сетки изображения глобуса на экран.

Объявления классов и структуры узла сетки помещены в заголовочном файле GLDat.h, исходный код которого приведен в листинге 22.16.

Листинг 22.16

fpragma once finclude <gl/gl.h>

const double Pi-3.141592653589793238461; typedef struct _TEXVERTEX1 //Описание узла сетки {

GLdouble x.y.z; //Декартовы координаты. GLdouble Nx. Ny, Nz; //Нормаль к поверхности. GLubyte R.G.B; //Компоненты цвета. }TEXVERTEX1;

typedef TEXVERTEX1 *pMERIDIAN; //Указатели для организации typedef pMERIDIAN *pL_GRID; //двумерного динамического массива.

typedef struct _ColorFon

Материал и освещение

{

//Определение цвета узла unsigned char B.G.R;

//Для задания в конструкторе класса GRIDBALL значения по умолчанию /параметра ColorFon F структуре _ColorFon необходим конструктор: _ColorFon(unsigned char _R.unsigned char _G.unsigned char _B)

{ B-_B; G-_G: R«_R:
}
} ColorFon;

class GRIDBALL //Класс для создания и хранения сетки вершин. {

double Rz; //Параметр сетки - в данном примере радиус шара.

double L0NG_GR; //Шаг меридиана. Расстояние между соседними меридианами.

double LAT_GR: //Шаг параллели. L0NG_GR и LAT_GR заданы в градусах.

ColorFon Fon; //Начальный цвет вершин сетки.

virtual void SetKnot(int i.int j.double di.double dj);
public:

int N1: //Количество меридианов, int Nh; //Количество параллелей.

pL_GRID Grid: //Имя содержащей сетку динамической матрицы. GRIDBALLCColorFon F - ColorFon(180.150.150). double R_z-0.8981. double Mer - 15.0.double Par « 15.0):


⇐ Предыдущая| |Следующая ⇒