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

Лабораторна робота №2 Тема: «Перетворення координат»

Мета роботи

Ознайомитися із засобами тривимірної візуалізації в OpenGL

Теоретична частина

В OpenGL використовуються як основні три системи координат : лівобічна, правостороння і віконна. Перші дві системи є тривимірними і відрізняються один від одного напрямом осі z : в правосторонній вона спрямована на спостерігача, а в лівобічній - в глиб екрану. Розташування осей x і y аналогічно описаному вище. Лівобічна система використовується для завдання значень параметрам команди gluPerspective(), glOrtho(), які будуть розглянуті нижче, а правостороння або світова система координат в усіх інших випадках. Відображення тривимірної інформації відбувається в двовимірну віконну систему координат.

Робота з матрицями

Для завдання різних перетворень об'єктів сцени в OpenGL використовуються операції над матрицями, при цьому розрізняють три типи матриць : видова, проекцій і текстури. Усі вони мають розмір 44. Видова матриця визначає перетворення об'єкту у світових координатах, такі як паралельне перенесення, зміна масштабу і поворот. Матриця проекцій задає як проектуватимуться тривимірні об'єкти на площину екрану (у віконні координати), а матриця текстури визначає накладення текстури на об'єкт.

Для того, щоб вибрати, яку матрицю потрібно змінити, використовується команда

void glMatrixMode (GLenum mode)

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

Для визначення елементів матриці поточного типу викликається команда

void glLoadMatrix[f d] (GLtype *m)

де m вказує на масив з 16 елементів типу float або double відповідно до назви команди, при цьому спочатку в ньому має бути записаний перший стовпець матриці, потім другий, третій і четвертий.

Команда

void glLoadIdentity (void)

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

void glPushMatrix (void)

void glPopMatrix (void)

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

Для множення поточної матриці ліворуч на іншу матрицю використовується команда

void glMultMatrix[f d] (GLtype *m)

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

В цілому, для відображення тривимірних об'єктів сцени у вікно додатка використовується наступна послідовність дій (рис. 1) :

Рис. 1 Дії для відображення тривимірних об’єктів