- •6.080200 – «Інформатика»
- •Під час виконання роботи студенти набувають досвіду у використанні спеціальних функцій графічного пакета OpenGl і методів програмування.
- •1 Рекомендації щодо написання та оформлення ргр
- •2 Короткі теоретичні відомості щодо виконання ргр
- •3 Приклади програм
- •4 Завдання до ргр
- •Список літератури
- •Розрахунково-графічна робота
- •39600, М. Кременчук, вул. Першотравнева, 20
2 Короткі теоретичні відомості щодо виконання ргр
За допомогою функцій примітивів, що існують в основній бібліотеці OPENGL, можна будувати точки, прямолінійні відрізки, зафарбовані опуклі багатокутники, а також піксельні або растрові матричні структури. У бібліотеці GLUT можна знайти стандартні процедури для зображення рядків символів. Інші види примітивів, такі як кола, еліпси або зафарбовані увігнуті багатокутні області, також можна будувати за допомогою цих функцій, або за допомогою стандартних процедур з бібліотек GLU і GLUT. Усі координатні значення виражаються в абсолютних координатах у правосторонній декартовій системі координат. Координати точок, за допомогою яких описується сцена, можуть задаватися як в дво, так і в тривимірній системі координат. Для завдання значень координат можуть використовуватися цілі числа або значення з плаваючою комою, крім того, можна задавати положення за допомогою вказівки на масив координатних значень. Опис сцени за допомогою функцій візуалізації перетвориться на двовимірне зображення на моніторі. За винятком функції glRect, координати кожної точки з набору точок, прямих або багатокутників задаються за допомогою функції glVertex. А набір функцій glVertex, що визначають кожен примітив, поміщається між парою операторів glBegin/glEnd, де тип примітиву визначається символьною константою, яка виступає аргументом функції glBegin. Якщо опис сцени складається з багатьох зафарбованих багатокутних поверхонь, можна раціонально створити зображення за допомогою масиву вершин OPENGL, у яких міститься вся геометрична та інша необхідна інформація.
У табл. 1 перераховані основні функції для створення результуючих примітивів в OPENGL і деяких пов'язаних з ними стандартних процедурах.
Таблиця 1 – Таблиця функцій примітивів OPENGL і пов'язаних з ними процедур
Функція |
Опис |
gluOrtho2D |
Задається двовимірна зовнішня система координат |
glVertex* |
Вибір координат. Ця функція повинна поміщатися між парою glBegin/glEnd glBegin (GL_POINTS); Будується одна або кілька точок, кожна з яких задається за допомогою функції glVertex. Потім список координат закривається за допомогою оператора glEnd |
glBegin (GL_LINES);
|
Відображується набір прямолінійних відрізків, координати кінців яких задаються за допомогою функції glVertex. Після чого закінчений список точок закривається за допомогою оператора glEnd |
glBegin (GL_LINE_STRIP);
|
Будується ламана лінія, яка задається за допомогою такої ж структури, що і GL_LINES |
glBegin (GL_LINE_LOOP); |
Відображується замкнута ламана лінія, яка задається за допомогою такої ж структури, що і GL_LINES |
glRect* |
Будується зафарбований прямокутник, лежить у площині ху |
glBegin (GL_POLYGON) |
Відображується зафарбований багатокутник, вершини якого задаються за допомогою функції glVertex і завершуються оператором glEnd |
glBegin (GLJTRIANGLES)
|
Створюється набір зафарбованих трикутників, які задається за допомогою такої ж структури, що і GL_POLYGON |
glBegin (GL_TRIANGLE_STRIP) |
Відображується мережа зафарбованих трикутників, яка задається за допомогою такої ж структури, що і GL_POLYGON |
glBegin (GL_TRIANGLE_FAN) |
Будується мережа зафарбованих трикутників у вигляді віяла, де всі трикутники з'єднуються в першій вершині, яка задається за допомогою такої ж структури, що і GL_POLYGON |
glBegin (GL_QUADS) |
Відображується набір чотирикутників, які задаються за допомогою такої ж структури, що і GL_POLYGON |
glBegin (GL_QUAD_STRIP) |
Відображується мережа чотирикутників, які задаються за допомогою такої ж структури, що і GL_POLYGON |
glEnableClientState (GL_VERTEX_ARRAY) |
Активізується можливість створення масиву вершин в OpenGL |
glVertexPointer (size, type, stride, array); |
Задається масив координат |
glDrawElements (prim, num, type, array) |
Відображується заданий тип примітиву з масиву даних |
glNewList (listID, listMode) |
Набір команд об'єднується в таблицю відображення, яка завершується оператором glEndList |
glGenLists |
Створюється один або кілька ідентифікаторів таблиць відображень |
gllsList |
Функція, яка слугує для запиту, «використовувався вже такий ідентифікатор таблиці відображення чи ні» |
glCallList |
Реалізується одна таблиця відображення |
glListBase |
Задається значення зсуву для масиву ідентифікаторів таблиць відображень |
glCallLists |
Реалізується кілька таблиць відображень |
glDeleteLists |
Видаляється задана послідовність таблиць відображень |
glRasterPos* |
Задається дво- або тривимірне поточне положення буфера кадру. Це положення використовується як опорна точка для бітового і піксельного відображень |
glBitmap (w, h, x0, у0, xShift, yShift, pattern) |
Задається бінарний узор, який повинен переноситися на пікселі, координати яких визначаються щодо поточного положення |
glDrawPixels (w, h, type, format, pattern) |
Задається колірний узор, який повинен переноситися на пікселі, координати яких визначаються щодо поточного положення |
glDrawBuffer |
Вибирається один або кілька буферів для запису піксельного відображення |
glReadPixels |
Блок пікселів записується у вибраний масив |
glCopyPixels |
Блок пікселів копіюється з однієї частини буфера в іншу |
glLogicOp |
Вибирається логічна операція для об'єднання двопіксельних масивів, після того, як таку можливість дає константа GL_COLOR_LOGIC_OP |
glutBitmapCharacter |
Задається шрифт і відображується растровий символ (font, symbol) |
glutStrokeCharacter |
Задається шрифт і відображується ескізний символ (font, symbol) |
glutReshapeFunc |
Задаються дії, які повинні виконуватися під час зміни розмірів вікна зображення |
Значення атрибутів примітивів у пакеті OPENGL записуються як змінні стану. Настройка певного атрибута діє на всі примітиви, що задаються після цього, до тих пір, поки значення атрибута не буде змінено. Зміна значення атрибута не впливає на примітиви, які були зображені раніше. У пакеті OPENGL кольори можна задавати, використовуючи режим RGB (RGBA), або режим індексів кольорів, за яким використовуються елементи таблиці кольорів. Крім того, значення кольорів змішується за допомогою компонента альфа. Також можна задавати значення масивів кольорів, які використовуються разом з масивами вершин. У пакеті OPENGL пропонуються функції для вибору розміру точки, ширини лінії, стилю лінії та стилю заповнення опуклого багатокутника, а також функції для зображення багатокутних зафарбованих фігур у вигляді набору сторін або набору точок-вершин. Також можна видалити з рисунка виділені сторони багатокутника і поміняти місцями передню і задню поверхні. У пакеті OPENGL можна створювати текстові рядки, використовуючи для цього бітові масиви або стандартні процедури, які є в бібліотеці GLUT. До атрибутів, які можна привласнювати зображенням символів бібліотеки GLUT, належать колір, шрифт, розмір, відстань між символами, ширина і тип лінії. У бібліотеці OPENGL пропонуються також функції для усунення контурних нерівностей зображення примітивів. Щоб дізнатися поточне значення змінної стану, можна скористатися функціями запиту, а також дізнатися всі значення групи атрибутів OPENGL за допомогою однієї функції.
У табл. 2 наведено всі функції атрибутів OPENGL і кілька функцій, що мають безпосереднє відношення до атрибутів.
Таблиця 2 – Огляд функцій атрибутів OPENGL
Функція |
Опис |
glutlnitDisplayMode |
Вибирається колірний режим GLUT_RGB або GLUT_INDEX |
glColor* |
Задається колір RGB або RGBA |
gllndex* |
Задається колір з використанням елементів таблиці кольорів |
glutSetColor (index, r, g, b) |
Запис кольору в певну позицію таблиці кольорів |
glEnable (GL_BLEND) |
Активізація функції змішування кольорів |
glBlendFunc (sFact, dFact) |
Задаються коефіцієнти змішування кольорів |
glEnableClientState (GL_COLOR_ARRAY) |
Активізуються можливості створення масивів кольорів OpenGL |
glColorPointer(size, type, stride, array) |
Задається масив кольорів RGB |
glIndexPointer(type, stride, array) |
Задається масив кольорів у режимі коефіцієнтів кольорів |
glPointSize (size) |
Задається розмір точки |
glLineWidth (width) |
Задається ширина лінії |
glEnable (GL_LINE_STIPPLE) |
Активізується стиль лінії |
glEnable (GL_POLYGON_STIPPLE) |
Активізується стиль заповнення |
glLineStipple (repeat, pattern) |
Задається узор стилю лінії |
glPolygonStipple (pattern) |
Задається узор стилю заповнення |
glPolygonMode |
Передня або задня сторона фігури відображується як набір сторін або вершин |
glEdgeFlag |
Установлюється прапор сторони зафарбованого багатокутника із значенням GL_TRUE або GL_FALSE, що визначає статус цієї сторони |
glFrontFace |
Порядок вершин передньої сторони задається як GL_CCW або GL_CW |
glEnable |
Активізується усунення контурних нерівностей за допомогою функцій GL_POINT_SMOGTH, GL_LINE_SMOOTH або GL_POLYGON_SMOOTH. (Ще потрібно активізувати функцію змішування кольорів) |
glGet** |
Різні функції запиту, що виявляють специфікацію типу даних, ім'я символьної константи параметра стану і посилання на масив |
glPushAttrib |
Збереження всіх параметрів стану заданої групи атрибутів |
glPopAttrib |
Відновлення всіх значень параметрів стану, які були збережені останніми |
