|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
ДОДАТКИ. Додаток|застосування| 1
Додаток|застосування| 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|». Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.011 сек.) |