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

Завдання

  1. Змініть колір вікна на світло-сірий, а потім на чорний.

  2. Змініть координати вікна зображення так, щоб нижній правий кут знаходився у точці з координатами (200, 200).

  3. Змініть розміри вікна: ширина вікна – 100 пікселів, висота – 75 пікселів.

Контрольні питання

  1. У чому, на вашу думку, полягає необхідність створення стандартної графічної бібліотеки?

  2. Стисло опишіть архітектуру бібліотек OPENGL та організацію конвеєра.

  3. Назвіть категорії команд (функцій) бібліотеки.

  4. Навіщо потрібні різні варіанти команд OPENGL, що відрізняються тільки типами параметрів?

  5. Чому організацію OPENGL часто порівнюють з кінцевим автоматом?

  6. Поясніть різницю між кореневою бібліотекою OPENGL, бібліотеками GLU і GLUT.

  7. Поясніть, що означає назву «Функція зворотного виклику зображення OPENGL».

Література: [3–6].

Лабораторна робота № 4 Тема. Відображення фігур зі зміною атрибутів

Мета роботи: ознайомитися з використанням контейнера точок, рисуванням у контексті пристроїв та масштабуванням зображення.

Короткі теоретичні відомості

Щоб описати геометрію точки, її положення задається в зовнішній системі координат. Потім ці значення разом з іншими геометричними параметрами обробляються стандартними процедурами візуалізації. Поки не буде задано інших значень атрибутів, примітиви OPENGL зображуються з розмірами і кольором, визначеними за замовчанням. Спочатку колір примітивів білий, а розмір точки дорівнює розміру одного пікселя на екрані.

Щоб задати координати точки, використовується наступна функція :

glVertex* ( ) ;

(*) означає, що для цієї функції необхідні індексні коди. Ці індексні коди позначають розмірність простору, тип числових даних, які використовуються як значення координат, і можливість зображення координат у вигляді вектора. Аргумент функції glBegin визначає тип графічного примітива, який слід зобразити. При виведенні на екран точки аргументом функції glBegin є символьна константа GL_POINTS.

glBegin (GL_POINTS);

glVertex* ( ) ;

glEnd ( );

Терміном vertex (вершина) називають "кутову" точку багатокутника, точку перетину сторін кута, точку перетину еліпса з його головною віссю або інші подібні точки геометричних фігур, функція glVertex в OPENGL визначає положення будь-якої точки. Для того щоб задати розмірність простору, у функції glVertex використовуються індекси 2, 3 або 4. Для позначення типу даних, який використовується для визначення числових значень координат, використовується другий індексний код функції glVertex. Тип числових даних позначають наступні індекси: i (integer), s (short), f (float) та d (double). Значення координат у функції glVertex можуть задаватися в явному вигляді, або використовується єдиний аргумент, який задає положення координат у вигляді масиву. Якщо застосовується визначення координат у вигляді масиву, потрібно додати третій індекс: v (vector). Приклад виведення на екран трьох точок.

glBegin (GL_POINTS);

glVertex2i (50, 100);

glVertex2i (75, 150);

glVertex2i (100, 200);

glEnd ();

Значення координат для вищенаведених точок можна задати у вигляді масивів

int pointl [ ] ={50, 100};

int point2 [ ] ={75, 150};

int point3 [ ] = {100, 200};

і викликати функції OPENGL для побудови трьох точок.

glBegin (GL_POINTS);

glVertex2iv (pointl);

glVertex2iv (point2);

glVertex2iv (point3);

glEnd ( );

Набір прямолінійних відрізків, що визначають з переліку кожну пару точок на кінцях, задається за допомогою константи лінії-примітива GL_LINES. Якщо число точок (на кінцях відрізків) у списку буде непарним, то останнє значення не обробляється. Наприклад, якщо є п'ять значень координат, пронумерованих від p1 до р5, кожне з них є двовимірним масивом, тоді наступний код це зображення двох пересічних прямих.

glBegin (GL_LINES);

glVertex2iv (p1);

glVertex2iv (p2);

glVertex2iv (p3);

glVertex2iv (p4);

glVertex2iv (p5); glEnd { );

За допомогою константи-примітива OPENGL GL_LINE_STRIP побудується ламана лінія за допомогою послідовності з’єднаних між собою відрізків від першої до останньої точки.

glBegin (GL_LINE_STRIP);

glVertex2iv (p1);

glVertex2iv (p5); glEnd ( );

Примітив прямої лінії – GL_LINE_LOOP будує замкнуту ламану лінію.

glBegin (GL_LINE_LOOP);

glVertex2iv (p1);

glVertex2iv (p5); glEnd ( );