Графічна бібліотека OpenGl
МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
Бердичівський політехнічний коледж
Контрольна робота
з предмета “Комп’ютерна графіка”
(варіант №12)
Виконав:
студент групи Пзс-504
Побережний Д.В..
Перевірив
викладач:
Козік В.Ю.
м. Бердичів
2007 р.
1. Крива Без'є
Цей алгоритм дозволяє обчислити координати (х, у) точки кривої Без'є за значенням параметра t.
1. Кожна сторона контуру багатокутника, що проходить по точках-орієнтирах, ділиться пропорційно значенню t.
2. Точки поділу з'єднуються відрізками прямих і утворюють новий багатокутник. Кількість вузлів нового контуру на одиницю менша, ніж кількість вузлів попереднього контуру.
3. Сторони нового контуру знову діляться пропорційно значенню t. І так далі. Це продовжується до тих пір, доки не буде отримано єдину точку поділу. Та точка й буде точкою кривої Без'є (рис. 3.9).
Наведемо запис геометричного алгоритму на мові C++:
Результат роботи алгоритму — координати однієї точки кривої Без'є — записуються в R[0].
Фігурою тут будемо вважати плаский геометричний об'єкт, який складається з ліній контуру та точок, що містяться всередині контуру. Контурів може бути декілька — наприклад, коли об'єкт має всередині порожнини (рис. 3.10). У деяких графічних системах одним об'єктом може вважатися й більш складна багатоконтурна фігура — сукупність островів із порожнинами.
Графічний вивід фігур поділяється на дві задачі: вивід контуру й вивід точок заповнення. Позаяк контур являє собою лінію, то вивід контуру проводиться на основі алгоритмів виводу ліній. У залежності від складності контуру, це можуть бути відрізки прямих, кривих або довільна послідовність сусідніх пікселів.
Для виводу точок заповнення відомі методи, котрі розділяються в залежності від використання контуру на два типи: алгоритми зафарбовування від внутрішньої точки до границь довільного контуру й алгоритми, що використовують математичний опис контуру.
2. Графічна бібліотека OpenGl
OpenGL — це "програмний інтерфейс для апаратури, яка створює графіку" [88]. Цей інтерфейс зроблений у вигляді бібліотеки функцій (Open Graphic Library — OpenGL). Розробник — фірма Silicon Graphics.
OpenGL стала індустріальним стандартом, вона підтримується багатьма операційними системами для різноманітних апаратних платформ — від персональних комп'ютерів до надпотужних суперкомп'ютерів. Бібліотека OpenGL дозволяє досить просто створювати швидкодіючі графічні програми, які використовують апаратні можливості ЗD-акселераторів. Тому вона часто використовується розроблювачами комп'ютерних ігор (наприклад, Quake) та систем тривимірного моделювання. В операційній системі Windows бібліотека OpenGL (версії 1.1) підтримана, починаючи з Windows 95 версії OSR 2, — були додані відповідні модулі DLL, а також включені кілька функцій і структур даних у АРІ Win32.
Перша версія OpenGL побачила світ у 1992 році. Розширення OpenGL втілювалися у версіях 1.1-1.5. Зараз на порядку денному впровадження OpenGL версії 2. Ця версія буде забезпечувати використання усіх можливостей графічних процесорів, у тому числі повну підтримку шейдерів.
Розробка графічних програм OpenGL для середовища Windows подібна програмуванню графіки GDI функцій АРІ, що ми розглянули в главах 7-10. Однак є особливості, деякі з яких ми вивчимо. Для одержання докладніших відомостей можна порекомендувати такі літературні джерела, як довідники для систем програмування для АРІ Win32 [86, 87].
Стосовно літератури. Незважаючи на те, що видано багато різноманітної літератури з OpenGL, в тому числі й кирилицею, радимо вам завжди намагатися читати першоджерела (це стосується будь-якої теми). Для OpenGL таким джерелом є знаменита "Red Book" від Silicon Graphics.
Швидкодія графічних програм, що використовують OpenGL, істотно залежить від відеоадаптера. Апаратна реалізація всіх базових функцій OpenGL — гарантія високої швидкодії. У даний час багато відеоадаптерів містять спеціальний графічний процесор (один чи декілька) для підтримки функції графіки. Крім того, що відеоадаптер повинен апаратно виконувати усі базові функції OpenGL (такі як перетворення координат, відсікання, вивід полігонів, розрахунок освітлення, накладення текстур), для досягнення високої швидкодії повинен бути встановлений спеціальний драйвер. Драйвери типу ICD (Installable Client Driver) забезпечують інтерфейс, що сприяє ефективному використанню апаратних можливостей відеоадаптера. Інший тип драйвера — MCD — встановлюється зазвичай тоді, коли не всі функції підтримані апаратно, в цьому випадку вони виконуються програмно центральним процесором, що істотно повільніше.
Розглянемо створення програм OpenGL мовою С, C++ у середовищі Windows. У главі 7 при розгляді графіки GDI ми визначили ключовий момент — це створення контексту графічного пристрою (device context). Графіка OpenGL у цьому плані схожа — необхідно спочатку створити контекст, що названий тут контекстом відображення {rendering context), і спрямовувати поточний вивід графіки на нього. Потім необхідно закрити цей контекст, звільнити пам'ять.
Будемо програмувати в стилі програм StudEx попередніх глав цієї книги. Цей стиль полягає в безпосередньому виклику функцій API Windows без будь-яких посередників типу MFC (чи інших подібних бібліотек). По-перше, це зменшує виконуваний код (оскільки кожному посереднику потрібно платити — ось тільки тут за що?), а по-друге, дозволить нам більш детально ознайомитися власне з OpenGL.
Дамо загальну схему програми OpenGL.
1. Створення вікна програми. Тут необхідно обов'язково установити стиль вікна ws_clipchildren і ws_clipsiblings. Це здійснюється завданням значень аргументів функції CreateWindow.
2. Після створення вікна можна відкривати контекст відображення. Рекомендується відкриття цього контексту робити під час обробки повідомлення wm_create.
3. Щоб створити контекст відображення, спочатку необхідно відкрити контекст вікна (hdc), наприклад, функцією GetDC.
4. Для з'ясування характеристик контексту відображення встановлюємо відповідні значення полів структури PIXELFORMATDESCRIPTOR і викликаємо функцію ChoosePixelFormat. Ця функція повертає номер піксельного формату, який можна використовувати. Якщо це — номер 0, то створення потрібного контексту відображення неможливо.
5. Викликом функції SetPixelFormat задаємо відповідний піксельний формат у контексті hdc.
6. На основі контексту hdc створюємо контекст відображення hglrc викликом функції wglCreateContext. Для переадресації поточного виводу графіки OpenGL у hglrc необхідно викликати функцію wglMakeCurrent.
7. У ході роботи програми виводимо графічні об'єкти в поточний контекст відображення. Графічний вивід можна здійснювати під час обробки повідомлення wm_paint чи інших повідомлень. Для цього використовуються функції для роботи з графічними примітивами OpenGL.
8. Перед закриттям вікна програми необхідно закрити всі відкриті контексти відображення. Також необхідно закрити всі контексти графічного пристрою. Це можна зробити в ході обробки повідомлення WM_DESTROY ВИКЛИКОМ функцій ReleaseDC І wglDeleteContext.
Щоб використовувати бібліотеку OpenGL, у середовищі розробки програм на С та C++ необхідно підключити відповідні файли заголовків.
Список використаної літератури:
1. С.В. Глушаков, Г.А. Крабе Компютерная графика, Харьков 2002
2. Блінова Т.О., Порєв В.М. Комп’ютерна графіка / За ред. В.М.Горєва. – К.: Видавництво “Юніор”, 2004.
3. OpenGl, технология ставшая символов, Учебник в примерах.