void resize(); // обработка изменения размера окна

void init(HWND hWnd); // инициализация OpenGl

void deinit(); // деинициализация OpenGl

void set(int); // выбрать одну из настроек OpenGl

// преобразовать Windows шрифт в список отображения void font(unsigned int disp_start=l,char*fontname=0, LOGFONT*lg=C), int type=0)

{

GLYPHMETRICSFLOAT char_set[256];

LOGFONT font_info; // шрифт по умолчанию if(lg==0)

{

font_info.lfHeight=25;

font_infо.1fWidth=0;

font_info.lfEscapement=0;

font_info.1fOrientation=0;

font_infо.lfWeight=FW_BOLD;

font_info.Ifltalic=0;

font_info.lfUnderline=0;

font_info.lfstrike0ut=0;

font_info.lfCharSet=ANSI_CHARSET;

font_infо.1fOut Precision=OUT_DEFAULT_PRECIS;

font info.lfClipPrecision=CLIP DEFAULT_PRECIS;

font_info.lfQuality=DEFAULT_QUALITY; font_info.IfPitchAndFamily=34 ; if(fontname)

lstrcpy(font_infо.1fFaceName,fontname); else

lstrcpy(font_info.IfFaceName, "ARIAL"); lg=&font_info;

}

// создаем шрифт

HFONT myfont=CreateFontIndirect(lg) ;

// выбираем в контекст созданный шрифт HFONT temp=SelectObject(hdc,myfont); switch(type) // тип символов {

case 1: // символ представлен линиями wglUseFontOutlines(hdc, 0, 255, disp_start ,0,0.1,

WGL_FONT_LINES,char_set);

break;

case 2: // символ представлен битовым изображением wglUseFontBitmaps (hdc,0,255,disp_start); break;

default: // символ представлен полигонами wglUseFontOutlines(hdc, 0, 255, disp_start, 0,0.1,

WGL_FONT_POLYGONS,char_set);

}

// возвращаем предыдущий шрифт SelectObj ect(hdc,temp);

DeleteObject(myfont); // уничтожаем созданный шрифт }

};

void GLmain::deinit() // освобождение ресурсов {

// делаем текущий контекст отображения нулевым wglMakeCurrent(NULL,NULL);

// уничтожаем контекст отображения

wglDeleteContext(hrc);

hrc=NULL;

// освобождаем контекст устройства окна ReleaseDC(hwnd,hdc); hdc=NULL;

if(select_size)delete[]select; if(feedback_size)delete[]feedback;

}

void GLmain: :init(HWND hWnd)

{

// заполнение структуры формата пикселя static PIXELFORMATDESCRIPTOR pfd=

{

sizeof(PIXELFORMATDESCRIPTOR),1,

P F D_ D RAW_T 0_WIN DOW|

PFD_SUPPORT_OPENGL|

PFD_DOUBLEBUFFER,PFD_TYPE_RGBA, 16,0,0,0,0,0,0,0,0,0,0,0,0,0,16,

16,0, PFD_MAIN_PLANE,0,0,0,0 } ;

hwnd=hWnd;

// получение дескриптора контекста устройства hdc=GetDC(hwnd);

// проверяем корректность выбранного формата int PixelFormat;

PixelFormat=ChoosePixelFormat(hdc,&pfd);

// устанавливаем формат пикселя // в контекст устройства SetPixelFormat(hdc, PixelFormat,&pfd);

// создаем контекст отображения OpenGL hrc=wglCreateContext(hdc) ;

// делаем контекст отображения текущим wglMakeCurrent(hdc, hrc) ;

}

void GLmain::set(int mode)

{

// выбор стека проективных матриц glMatrixMode(GL_PROJECTION);

// приведение ее в единичную glLoadldentity();

RECT rect;

// устанавливаем тип проекции и объем видимости switch(mode) і

case 1: // ортографическая проекция glOrtho(-100,100,-100,100,-100,100);

l=-100;r=100;b=-100;t=100;n=-100; f=100; break;

case 2: // перспективная проекция glFrustum(-100,100,-100,100,1,200);

1=-100;r=100;b=-100;t = 100;n=l; f=200; break;


⇐ вернуться назад | | далее ⇒