Введення
В даний час одними з пріоритетних напрямків інформаційних технологій є тривимірна графіка і 3D-моделювання. Тривимірна графіка оперує з об'єктами в тривимірному просторі, відображеними, як правило, на двовимірному пристрої.
Комп'ютерна графіка знайшла широке практичне застосування. Мова йде про комп'ютерні ігри, просторових моделях, зручному поданні зображень деталей пристроїв і машин, вирішенні математичних завдань, пов'язаних з властивостями поверхонь і геометричних тіл, і т.д.
Інженери і архітектори використовують тривимірну графіку для створення віртуальних моделей. Кінематографісти і розробники комп'ютерних ігор створюють спецефекти і анімацію, реалістичні ландшафти та інші зображення об'єктів реального світу.
При розробці 3D-моделей в даний час часто застосовується програмний інтерфейс OpenGL, який стандартизує доступ до графічної апаратурі шляхом зміщення відповідальності за створення апаратного драйвера на виробника графічного пристрою. [1] Це дозволяє розробникам програмного забезпечення використовувати більш високий рівень абстракції від графічного обладнання, що значно прискорило створення нових програмних продуктів і знизило на них витрати. Наприклад, не потрібно передбачати функції проектування тривимірних об'єктів на двовимірну систему координат пристрою виводу [3], що довелося б робити, наприклад, якщо виконувати розробку, використовуючи чисто функції GDI.
У даному проекті розглядається робота з 3D-моделлю лабіринту за допомогою OpenGL, а також створення деяких спецефектів - туману, снігу, динамічного освітлення.
1. Технічне завдання
У рамках даного курсового проекту потрібно створити 3D-модель лабіринту з вертикальними стінами. Розробка програми повинна здійснюватися в будь візуальної середовищі з обов'язковим використанням графічних бібліотек OpenGL або аналогічних (наприклад, DirectX). Необхідно забезпечити можливість розглянути сцену з різних сторін.
2. Розробка структур даних
.1 Ієрархія об'єктів у просторі
Модель лабіринту доцільно представити як ієрархічну, тобто складається з двох типів об'єктів: 1) окремі полігони; 2) моделі частин лабіринту, що складаються з полігонів або моделей більш малих частин. При такому формулюванні природно представити модель лабіринту у вигляді дерева (див. Рис. 2.1). Окремі полігони в даному випадку зберігаються в листках. Корінь відповідає всій моделі.
дана тип графічний алгоритм
Рис. 2.1 - Дерево моделі лабіринту
2.2 Користувальницькі типи даних
Доцільно запровадити ряд користувацьких типів даних.
. Структура даних точка - в принципі не надає деяких нових функцій, але дозволяє працювати з координатами точки як з даними одного об'єкта, а не розрізненими даними, а також задіяти елементи об'єктно-орієнтованого програмування для більш зручної роботи з 3D-моделями.
struct Point3D/* структура ТОЧКА */
{x, y, z;
/* основні методи */
/* заповнення полів структури */
void FillFields (double x, double y, double z)
{ gt; x=x; gt; y=y;
this- gt; z=z;
}
/* отрисовка точки або вибір вершини полігону */
void Vertex () {glVertex3f (x, y, z); }
.../* інші методи */
};
Структура дані про клітці лабіринту - зберігає дані про те, які саме зображення будуть використовуватися на кожному з 4 шматків стін, відповідних даній клітині. Кожному зображенню відповідає його номер, а якщо відповідного шматка стіни немає (наприклад, якщо дана клітина знаходиться біля входу в лабіринт, то як мінімум одного шматка немає), то в якості номера береться спеціальне значення.
FieldInfo/* структура ДАНІ ПРО КЛЕТКЕ ЛАБІРИНТУ */
{
/* номер зображень кожної зі стінок
(0, якщо стінки немає) */
int TextureBack, TextureRight, TextureFront, TextureLeft;
.../* методи */
};
Структура дані про модель лабіринту - зберігає дані про всі клітинах лабіринту. Містить розміри лабіринту і матрицю типу FieldInfo. Така організація даних може на перший погляд здатися надмірною - якщо у двох клітин лабіринту є загальна стіна, то факт її наявнос...