АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

ДОДАТКИ. Додаток|застосування| 1

Читайте также:
  1. ДОДАТКИ
  2. Додатки
  3. Додатки
  4. Додатки
  5. Додатки
  6. Додатки
  7. Додатки
  8. Додатки
  9. Додатки
  10. Додатки
  11. Додатки
  12. Додатки

 

Додаток|застосування| 1.

Мінімальний код програми OPENGL| на C++|.

 

 

#include| <windows|.h> // Заголовний файл для Windows|

#include| <gl\gl|.h> // Заголовний файл для OpenGL32| бібліотеки

#include| <gl\glu|.h> // Заголовний файл для GLu32| бібліотеки

#include| <gl\glaux|.h> // Заголовний файл для GLaux| бібліотеки

static| HGLRC| hRC|; // Постійний контекст рендеринга|

static| HDC| hDC|; // Приватний контекст пристрою|устрою| GDI|

BOOL| keys|[256]; // Масив для процедури обробки клавіатури

GLvoid| INITGL|(GLsizei| Width|, GLsizei| Height|) // Викликати|спричиняти| після|потім| створення|створіння|

// вікна GL|

{

glClearColor|(0.0f, 0.0f, 0.0f, 0.0f); // Очищення|очистка| екрану в чорний колір|цвіт|

}

GLvoid| ReSizeGLScene|(GLsizei| Width|, GLsizei| Height|)

{

if| (Height==0|) // Запобігання діленню|поділу| на нуль

//якщо вікно дуже|занадто| мале

Height=1|;

 

glViewport|(0, 0, Width|, Height|); // Скидання|скид| поточної області виводу|висновку|

}

GLvoid| DrawGLScene|(GLvoid|)

{

glClear|(GL_COLOR_BUFFER_BIT|); // Очищення|очистка| екрану

// Тут створюється малюнок

glPointSize|(2);

glBegin|(GL_POINTS|);

glColor3f|(1,0,0);

glVertex2f|(-0.45,-0.4); // перша крапка|точка|

 

glColor3f|(0,1,0);

glVertex2f|(0.4,0.4); // друга крапка|точка|

 

glColor3f|(0,0,1); //третья крапка|точка|

glVertex2f|(-0.35,0.4);

glEnd|();

 

glLineWidth|(3);

 

glBegin|(GL_LINE_STRIP|); // ламана лінія

glColor3f|(0.7,0.3,0);

glVertex2f|(-0.10,0);

glVertex2f|(1,0.13);

glColor3f|(0,1,0);

glVertex2f|(-0.15,0.33);

glColor3f|(0,0,1);

glVertex2f|(-0.12,0.35);

glEnd|();

// тут закінчилося створення|створіння| малюнка

}

 

LRESULT| CALLBACK| WndProc|(HWND| hWnd|

UINT| message|

WPARAM| wParam|

LPARAM| lParam|)

{

RECT| Screen|; // використовується пізнішим для розмірів вікна

GLuint| PixelFormat|;

static| PIXELFORMATDESCRIPTOR| pfd=|

{

sizeof|(PIXELFORMATDESCRIPTOR|) // Розмір цієї структури

1, // Номер версії (?)

PFD_DRAW_TO_WINDOW| | // Формат для Вікна

PFD_SUPPORT_OPENGL| | // Формат для OPENGL|

PFD_DOUBLEBUFFER| // Формат для подвійного буфера

PFD_TYPE_RGBA| // Требуєтся RGBA| формат

16, // Вибір 16 біт глибини кольору|цвіту|

0, 0, 0, 0, 0, 0, // Ігнорування колірних бітів (?)

0, // немає буфера прозорості

0, // Сдвіговий біт ігнорується (?)

0, // Немає буфера акумуляції

0, 0, 0, 0, // Біти акумуляції ігноруються (?)

16, // 16 бітовий Z-буфер| (буфер глибини)

0, // Немає буфера траффарета|

0, // Немає допоміжних буферів (?)

PFD_MAIN_PLANE| // Головний|чільний| шар малювання

0, // Резерв (?)

0, 0, 0 // Маски шару ігноруються (?)

};

switch| (message|) // Тип повідомлення|сполучення|

{

case| WM_CREATE|:

hDC| = GETDC|(hWnd|); // Отримати|одержувати| контекст пристрою|устрою| для вікна

PixelFormat| = ChoosePixelFormat|(hDC| &pfd);

// Знайти найближчий збіг для нашого формату пікселів

if| (!PixelFormat)

{

MessageBox|(0,"Can't| Find| A SuitablePixelFormat|.","Error",MB_OK|MB_ICONERROR);

PostQuitMessage|(0);

// Це повідомлення|сполучення| говорить, що програма повинна завершитися

break|; // Запобігання повтору коду

}

if|(!SetPixelFormat(hDC,PixelFormat,&pfd|))

{

MessageBox|(0,"Can't| Set| ThePixelFormat|.","Error",MB_OK|MB_ICONERROR);

PostQuitMessage|(0);

break|;

}

hRC| = wglCreateContext|(hDC|);

if|(!hRC)

{

MessageBox|(0

"Can't| Create| A GLRenderingContext|.",

"Error",MB_OK|MB_ICONERROR|);

PostQuitMessage|(0);

break|;

}

if|(!wglMakeCurrent(hDC|, hRC|))

{

MessageBox|(0,"Can't| activate| GLRC|.","Error",MB_OK|MB_ICONERROR);

PostQuitMessage|(0);

break|;

}

GetClientRect|(hWnd| &Screen);

INITGL|(Screen|.right, Screen|.bottom);

break|;

case| WM_DESTROY|:

case| WM_CLOSE|:

ChangeDisplaySettings|(NULL|, 0);

 

wglMakeCurrent|(hDC,NULL|);

wglDeleteContext|(hRC|);

RELEASEDC|(hWnd,hDC|);

PostQuitMessage|(0);

break|;

case| WM_KEYDOWN|:

keys|[wParam|]= TRUE|;

break|;

 

case| WM_KEYUP|:

keys|[wParam|]= FALSE|;

break|;

case| WM_SIZE|:

ReSizeGLScene|(LOWORD|(lParam|),HIWORD|(lParam|));

break|;

default|:

return| (DefWindowProc|(hWnd|, message|, wParam|, lParam|));

}

return| (0);

}

int| WINAPI| WinMain|(HINSTANCE| hInstance,HINSTANCE| hPrevInstance|

LPSTR| lpCmdLine,int| nCmdShow|)

{

MSG| msg|; // Структура повідомлення|сполучення| Windows|

WNDCLASS| wc|; // Структура класу Windows| для установки типу|типу| вікна

HWND| hWnd|; // Збереження|зберігання| дескриптора вікна

wc|.style = CS_HREDRAW| | CS_VREDRAW| | CS_OWNDC|;

wc|.lpfnWndProc = (WNDPROC|) WndProc|;

wc|.cbClsExtra = 0;

wc|.cbWndExtra = 0;

wc|.hInstance = hInstance|;

wc|.hIcon = NULL|;

wc|.hCursor = LoadCursor|(NULL|, IDC_ARROW|);

wc|.hbrBackground = NULL|;

wc|.lpszMenuName = NULL|;

wc|.lpszClassName = "OPENGL| WinClass|";

if|(!RegisterClass(&wc|))

{

MessageBox|(0

"Failed| To| Register| The| WindowClass|.",

"Error",MB_OK|MB_ICONERROR|);

return| FALSE|;

}

hWnd| = CreateWindow|("OPENGL| WinClass|"

"First| OPENGL| program|" // Заголовок зверху| вікна

 

WS_POPUP| |

WS_CLIPCHILDREN| |

WS_CLIPSIBLINGS|

0, 0, // Позиція вікна на екрані

640, 480, // Ширина і висота вікна

NULL|

NULL|

hInstance|

NULL|);

if|(!hWnd)

{

MessageBox|(0,"Window| Creation| Error|.","Error",MB_OK|MB_ICONERROR);

return| FALSE|;

}

if|(!hWnd)

{

MessageBox|(0,"Window| Creation| Error|.","Error",MB_OK|MB_ICONERROR);

return| FALSE|;

}

 

ShowWindow|(hWnd|, SW_SHOW|);

UpdateWindow|(hWnd|);

SetFocus|(hWnd|);

while| (1)

{ // Обробка всіх повідомлень|сполучень|

while| (PeekMessage|(&msg|, NULL|, 0, 0, PM_NOREMOVE|))

{

if| (GetMessage|(&msg|, NULL|, 0, 0))

{

TranslateMessage|(&msg|);

DispatchMessage|(&msg|);

}

else|

{

return| TRUE|;

}

}

 

DrawGLScene|(); // Намалювати сцену

SwapBuffers|(hDC|); // Перемкнути|переключати| буфер екрану

if| (keys|[VK_ESCAPE|]) SendMessage|(hWnd,WM_CLOSE,0,0|); // Якщо ESC| - вийти

}

}

 

Додаток|застосування| 2.

Мінімальний код програми для використання OPENGL| в програмі на Delphi|.

 

У додатку|застосуванні| приводяться|призводять| три варіанти програм, що дозволяють використовувати бібліотеку OPENGL| для графічного виводу|висновку|. Приклади|зразки| узяті з диска до книги Краснова М.В. «OPENGL| в проектах Delphi|».


1 | 2 | 3 | 4 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.014 сек.)