Материал: Lecture_notes_on_discipline_Meth

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

11

Приклад коду, що задає світове вікно і видовий екран з використанням графічної бібліотеки Open GL:

static GLint viewport[] = [0, 0, 400, 400];

/* видовий екран задається координатами вікна */ static GLclamped depth_range[] = {0.0, 1.0};

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

static GLdouble viewing_volume[] = {-100.0, 100.0, -100.0, 100.0, - 10.0, 10.0};

/* аргументи в координатах перегляду, (1 – 4) – горизонтальний і вертикальний розміри вікна,

(5 – 6) – відстань від екрана до найближчої і найдальшої площини */

glOrtho {viewing_volume[0], viewing_volume[1], …, viewing_volume[5]};

/* визначає тип проекції, створює матрицю об’єму, що переглядається*/

glViewport (viewport[0], …, viewport[3]);

/* визначає прямокутник вікна і відображає в нього зображення

*/

glDepthRange (depth_range[0], depth_range[1]);

/* визначає кодування z-координат при перетворенні перегляду */

1.4 Графічні примітиви

Графічні примітиви (primitives) – це елементи графіки (точки, лінії, ламані, полігони), які можуть відображатись бібліотекою і задаються однією або декількома вершинами (vertices). Вивід примітивів в OpenGL оформлюється парою функцій:

glBegin (mode);

… // вершини об’єкта glEnd ();

де

mode – код типу об’єкта.

11

12

Таблиця 1.1 – Трактовка списку вершин для різних аргументів функції glBegin

mode

Як виконується графічний вивід

GL_POINTS

Вершини-окремі точки

 

 

GL_LINES

Вершини, з’єднані відрізками

прямої

 

GL_LINE_STRIP

Полілінія

 

 

GL_LINE_LOOP

Замкнена полілінія

 

 

GL_TRIANGLES

Трійки вершин, що створюють

трикутники

 

GL_TRIANGLE_STRIP

Зв’язані трикутники (полоса)

 

 

GL_TRIANGLE_FAN

Зв’язані трикутники зі спільною

вершиною (веер)

 

 

 

GL_QUADS

Чотири вершини, що створюють

чотирикутники

 

GL_QUAD_STRIP

Зв’язані чотирикутники

 

 

GL_POLYGON

Багатокутник

 

 

Наприклад, програмний код для малювання сузір’я Велика Ведмедиця:

glBegin (GL_POINTS); glVertex2i (289, 190);

/* Dubhe */ glVertex2i (320, 128);

/* Merak */ glVertex2i (230, 67);

/* Phecda */ glVertex2i (194, 101);

/* Megrez */ glVertex2i (129, 83);

12

13

/* Alioth */ glVertex2i (75, 73);

/* Mizar */ glVertex2i (74, 74);

/* Alcor */ glVertex2i (209, 10);

/* Alcaid */ glEnd ();

glVertexXX (…) – функція завдання координат, яка має декілька варіантів суфікса в залежності від типу і кількості аргументів, наприклад:

i – 32-х бітне ціле; f – 32-х бітне дійсне; d – 64-х бітне дійсне.

Якщо ми інкапсулюємо команди Open GL для малювання точки в базову функцію drawDot(), то така підпрограма буде виглядати наступним чином:

void drawDot (GLint x, GLint y);

{

glBegin (GL_POINTS); glVertex2i (x, y); glEnd ();

}

OpenGL відстежує множину змінних стану: поточний розмір точки, поточий колір малювання, колір фону.

Розмір точки встановлюється за допомогою функції glPointSize(), колір для малювання: glColor3f (red, green, blue).

Наприклад, деякі з кольорів можуть бути задані так: glColor3f (1.0, 0.0, 0.0) // червоний

glColor3f (1.0, 1.0, 1.0) // білий

Колір фону встановлюється за допомогою функції

glClearColor (red, green, blue, alpha), де змінна alpha визначає ступінь прозорості.

13

14

1.5 Дисплейний файл

Дисплейний файл (display list) – це група команд графічної бібліотеки, збережена для подальшого виконання.

Дисплейний файл забезпечує зручність та ефективність упорядкування та обробки команд бібліотеки.

Створення дисплейного файлу:

glNewList (AREA_FILL, GL_COMPILE_END_EXECUTE); glBegin (GL_POLYGON);

glVertex2i (point1); glVertex2i (point2);

glEnd (); glEndList ();

Дисплейний файл Open GL орієнтований на оптимізацію продуктивності для роботи в мережі, яка забезпечується завдяки тому, що дисплейний файл працює дуже швидко та зберігається у виді списку команд, а не у виді динамічної бази даних.

При передачі підпрограми Open GL по мережі, дисплейні файли зберігаються на сервері, завдяки чому скорочується мережевий трафік.

До створеного дисплейного файлу можна застосувати наступні операції:

множинне виконання;

ієрархічне виконання;

видалення.

1.6 Текст та маркери на малюнках

Більшість графічних бібліотек підтримує два види тексту: екранний або 2D,текст для пояснень, 3D - об’ємний текст.

Атрибути теста:

-шрифт;

-відношення висоти до товщіни;

-кут нахилення літер;

-положення ы напрямок рядка тексту.

Текст може буди представлений символами двох видів: апаратними (складаються з окремих відрізків), та

14

15

програмними(заздалегіть розробляються графічними програмами та зберігаються в пам’яті комп’ютера.)

Маркери різних типів (точка, коло, хрестик, сніжинка) використовуються для виділення точек на графіках. Open GL не підтримує маркери явно, але надає механізм їх збереження маркерів у растрових файлах і виведення їх на екран.

1.7 Перетворення координат

Афінні перетворення – лінійні перетворення координат, які надають гнучкий спосіб керування розмірами, орієнтацією та розміщенням обїєктів, що нас цікавлять.

Область застосування:

складання картинки з однакових об’єктів простої форми;

використання «мативу» для створення малюнка;

перегляд сцени з різних точок спостереження;

анімація шляхом перетворення форм(робота з окремими локальними системами координат обьєктів);

перетворення координат з однієї системи в іншу. Перетворення координат з однієї системи в іншу вимагають

застосування операцій трансляції, повороту і відображення.

Ці перетворення виконуються графічною бібліотекою самостійно, а програміст повинен тільки вказати:

при перетворенні модельних координат в світові – трансляцію (переміщення) і поворот;

при перетворенні з світових координат в координати спостережника – точки зору, точки спостереження та напрямок вектора вертикалі.

15