Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ИГС / IGS_2014-2015 / Lab_04 / glopen06 / glopen06

.cpp
Скачиваний:
5
Добавлен:
17.04.2018
Размер:
6.23 Кб
Скачать


#define STRICT
#include <windows.h>
#include <windowsx.h>
#include <gl\gl.h>
#include <gl\glu.h>

//имя класса главного окна программы
char const szClassName[] = "OpenGL";
//заголовок окна 
char const szWindowTitle[] = "Korneev V.  Graphics by OpenGL";


//прототипы функций
BOOL RegisterApp(HINSTANCE);
HWND CreateApp(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void DestroyOpenGL();
void DrawOpenGL(HWND);


//главная функция
int PASCAL WinMain(HINSTANCE hInstance,
				HINSTANCE hPrevInstance,
				LPSTR     lpszCmdParam,
				int       nCmdShow)
{
	MSG msg;     //структура для работы с сообщениями

//регистрация класса главного окна программы
	if(!RegisterApp(hInstance))
		return FALSE;

//создание главного окна программы
	if(!CreateApp(hInstance,nCmdShow))
		return FALSE;

//цикл обработки сообщений
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

//регистрация класса главного окна программы
BOOL RegisterApp(HINSTANCE hInstance)
{
	WNDCLASS wc;  //структура для регистрации класса главного окна программы

	wc.style         = CS_HREDRAW | CS_VREDRAW; //стиль окна 
	wc.lpfnWndProc   = WndProc;                 //имя оконной процедуры
	wc.cbClsExtra    = 0;
	wc.cbWndExtra    = 0;
	wc.hInstance     = hInstance;               //дескриптор программы
	wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor		  = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = GetStockBrush(LTGRAY_BRUSH);
	wc.lpszMenuName  = "GLMENU";         //имя меню главного окна программы
	wc.lpszClassName = szClassName;      //имя класса главного окна программы 

	return RegisterClass(&wc);
}



//создание главного окна программы
HWND CreateApp(HINSTANCE hInstance, int nCmdShow)
{
	HWND hwnd;   //дескриптор главного окна программы

	hwnd = CreateWindow(szClassName,		//имя класса окна 
						szWindowTitle,		//заголовок окна 
						WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN
						| WS_CLIPSIBLINGS,	//стиль окна
						CW_USEDEFAULT,		//положение и размеры окна 
						CW_USEDEFAULT,
						CW_USEDEFAULT,
						CW_USEDEFAULT,
						NULL,
						NULL,
						hInstance,
						NULL);

	if(hwnd == NULL)
		return hwnd;

//рисуем окно
	ShowWindow(hwnd,nCmdShow);
//обновляем окно
	UpdateWindow(hwnd);

	return hwnd;
}

//оконная функция, обрабатывающая сообщения
LRESULT CALLBACK  WndProc(HWND hwnd, UINT msg,
							WPARAM wParam, LPARAM lParam)
{

	switch(msg)
	{
		case WM_COMMAND:  //сообщение для работы с меню
			switch(wParam)
			{
				case 200:
					InvalidateRect(hwnd,NULL,TRUE); //очищаем окно
					break;
				case 202:
					DrawOpenGL(hwnd);   //рисуем графические объекты
					break;
				case 201:
					DestroyWindow(hwnd); //завершает работу окна
					break;
			}
			break;  

		case WM_DESTROY:
			DestroyOpenGL();
			break;
		
		default:
			return DefWindowProc(hwnd,msg,wParam,lParam);
	}

	return 0L;
}

//завершение работы программы
void DestroyOpenGL()
{
	PostQuitMessage(0);   //окончание цикла сообщений
}


//рисуем графические объекты
void DrawOpenGL(HWND hwnd)
{
	HDC hdc = GetDC(hwnd); //получаем контест окна

//структура описания формата пикселя
	PIXELFORMATDESCRIPTOR pfd;

//зануляем все поля структуры pfd
	memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));

//заполняем некоторые поля структуры
	pfd.nSize      = sizeof(PIXELFORMATDESCRIPTOR);
	pfd.nVersion   = 1;
	pfd.dwFlags    = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL;
	pfd.iPixelType = PFD_TYPE_RGBA;
	pfd.cColorBits = 24;

//выбираем наиболее подходящий формат пикселей
	int iPixelFormat = ChoosePixelFormat(hdc, &pfd);
//устанавливаем найденный формат пикселей в контектсте окна
	SetPixelFormat(hdc, iPixelFormat, &pfd);

//получаем контекст отображения OpenGL
	HGLRC hglrc = wglCreateContext(hdc);
//устанавливаем текущий контекст отображения OpenGL
	wglMakeCurrent(hdc, hglrc);



//устанавливаем двухмерную ортогональную область просмотра
	gluOrtho2D(-400, 400, -300, 300);


// Т О Ч К И

//размер точки
   glPointSize(10);

   glBegin(GL_POINTS);
	glColor3f(1.0, 0.0, 0.0);
   glVertex2f(-300, 200);
	glColor3f(1.0, 0.5, 0.0);
   glVertex2f(-200, 200);
	glColor3f(1.0f, 0.8f, 0.0f);
   glVertex2f(-100, 200);
   glEnd();


// О Т Р Е З К И

//текущий цвет
   glColor3f(0, 0, 0);
//толщина линии
   glLineWidth(2.0f);

   glBegin(GL_LINES);
   glVertex2f(-350, 0);
   glVertex2f(350, 0);
   glVertex2f(0, -250);
   glVertex2f(0, 250);
   glEnd();


// С В Я З А Н Н Ы Е  О Т Р Е З К И

   glLineWidth(4.0f);

   glBegin(GL_LINE_STRIP);
   glColor3f(0, 1, 0.25);
   glVertex2f(-350, 50);
   glColor3f(1, 0.25, 0.5);
   glVertex2f(-300, 100);
   glColor3f(1, 0.25, 0.75);
   glVertex2f(-250, 50);
   glColor3f(1, 0.25, 1);
   glVertex2f(-200, 100);
   glEnd();


// З А М К Н У Т А Я   Л И Н И Я

   glLineWidth(4.0f);

   glBegin(GL_LINE_LOOP);
   glColor3f(0, 1, 0.25);
   glVertex2f(-200, 50);
   glColor3f(1, 0.25, 0.5);
   glVertex2f(-150, 100);
   glColor3f(1, 0.25, 0.75);
   glVertex2f(-100, 50);
   glColor3f(1, 0.25, 1);
   glVertex2f(-50, 100);
   glEnd();


// Т Р Е У Г О Л Ь Н И К И

   glBegin(GL_TRIANGLES);
   glColor3f(0, 1, 0);
   glVertex2f(10, 200);
   glVertex2f(70, 200);
   glVertex2f(40, 250);
   glColor3f(0, 1, 0.75);
   glVertex2f(80, 200);
   glVertex2f(140, 200);
   glVertex2f(110, 250);
   glEnd();


// Ч Е Т Ы Р Е Х У Г О Л Ь Н И К

   glColor3f(0, 0, 1);

   glBegin(GL_QUADS);
   glVertex2f(100, 150);
   glVertex2f(200, 200);
   glVertex2f(300, 150);
   glVertex2f(200, 100);
   glEnd();


// В Ы П У К Л Ы Й    П О Л И Г О Н

   glColor3f(0, 1, 1);

   glBegin(GL_POLYGON);
   glVertex2f(-300, -150);
   glVertex2f(-200, -70);
   glVertex2f(0, -70);
   glVertex2f(200, -200);
   glVertex2f(-100, -250);
   glEnd();








//завершаем работу с текущим контекстом отображения
	wglMakeCurrent(NULL, NULL);
//освобождаем контекст отображения OpenGL
	wglDeleteContext(hglrc);

//освобождаем контекст окна
	ReleaseDC(hwnd,hdc);
}





Соседние файлы в папке glopen06
  • #
    17.04.20186.23 Кб5glopen06.cpp
  • #
    17.04.20184.06 Кб5glopen06.dsp
  • #
    17.04.2018539 б5glopen06.dsw
  • #
    17.04.201841.98 Кб5glopen06.ncb
  • #
    17.04.201848.64 Кб5glopen06.opt
  • #
    17.04.20181.41 Кб5glopen06.plg