Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод КР укр.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
293 Кб
Скачать
☆

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

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