- зміст Вступ
- 1. Розробка полігональної моделі об'єкта
- 1.2 Триангуляція поверхні об'єкта
- 2. Опис алгоритмів афінних перетворень
- 2.1 Переміщення об'єкта
- 2.2 Обертання об'єкта
- 2.3 Масштабування об'єкта
- 3. Опис алгоритмів проекційних перетворень
- 4. Опис алгоритмів довільних перетворень камери
- 5. Програмна реалізація
- висновки
- Корисні ресурси
зміст Вступ
З дитинства я дуже люблю грати у відео ігри і мені хотілося написати якусь власну гру. Вивчивши основи програмування, програмуванням 3D графіки я зайнявся на 2-му курсі. Я маю 2 роки досвіду роботи з 3D графікою в компанії Soft-Xpansion. У Soft-Xpansion я восновном моделюю шестерінки, болти, підшипники, вали, тригера і т.д.
У світі висвітлені різні аспекти розробки тривимірних додатків, однак основна увага приділяється питанням програмування - зокрема, представлення тривимірних об'єктів, їх візуалізації з урахуванням властивостей матеріалу об'єктів, освітлення, перспективи, а також таким специфічним питань тривимірної візуалізації, як створення різних візуальних спецефектів і т .п. Розглянемо такі завдання: візуалізація тривимірного об'єкту, створення і параметризація об'єкта, алгоритми центрального і паралельного проектування, алгоритми різних перетворень.
Програмування 3D графіки розглянемо на прикладі розробки графічного редактора для роботи з параметризованих тривимірними об'єктами. Існує безліч прикладних програм, для роботи з тривимірними графічними об'єктами. Всілякі графічні редактори дозволяють працювати з об'єктами різного типу. При цьому важливими факторами є точне відображення реальних об'єктів і швидкість роботи. В результаті виникає завдання графічного моделювання об'єктів на ЕОМ, при вирішенні якої головним фактором є найбільш точне відображення реального об'єкта.
1. Розробка полігональної моделі об'єкта
1.1 Складові елементи об'єкта
Полігональна модель в комп'ютерній графіці - це образ об'єкту, складений з безлічі багатокутників. Ми будемо розробляти полигональную модель об'єкта «літак». Тривимірне зображення об'єкта представлено на рис. 1.1.
Малюнок 1.1 - Тривимірне зображення проектованого об'єкта
Об'єкт складається з декількох видів поверхонь, які в свою чергу розбиваються на полігони для зручності зберігання і обробки. Об'єкт складається з наступних видів фігур:
- капсула;
- паралелепіпед;
- призма, в основі якої прямокутний трикутник.
Капсула задається базовою точкою, радіусом, висотою циліндричної частини капсули. Паралелепіпед задається базовою точкою, шириною, довжиною і висотою, на основі яких відбувається розрахунок координат восьми точок вершин паралелепіпеда. Призма задається базовою точкою, 2-мя катетами трикутника, який лежить в основі призми, і висотою призми.
1.2 Триангуляція поверхні об'єкта
Триангуляція поверхонь - це процес розбиття складних об'єктів на трикутні полігони. Триангуляція зручна при програмуванні графіки, т.к .:
- трикутник є найпростішим полігоном, вершини якого однозначно задають грань;
- будь-яку область можна гарантовано розбити на трикутники;
- обчислювальна складність алгоритмів розбиття на трикутники істотно менше, ніж при використанні інших полігонів;
- реалізація процедур візуалізації більш проста для області, обмеженої трикутником;
- для трикутника легко визначити три його найближчих сусіда, що мають з ним спільні грані.
Над об'єктом проводиться тріангуляція наступним чином. Всі примітиви, з яких складається об'єкт розбиті на трикутники. Всі прямокутні грані розбиваються діагоналлю на два рівних трикутника. Таким чином, паралелепіпеди складаються з 12 трикутних полігонів. Бічна поверхня циліндра (частина нашої капсули) розбита на частини по висоті і кожна частина розбивається на рівні прямокутники, які після розбиваються на трикутники.
Для отримання координат вершин капсули використовуються формули переходу з циліндричної системи координат в декартову систему координат (рис. 1.2). У формулах циліндр має радіус R і висоту ZC. Повної окружності відповідає діапазон зміни параметра кута від 0 до 2Пі. Якщо розглядати деяке фіксоване число, рівномірно розподілених, точок по колу, то приріст параметра між точками можна вважати константою (рис. 1.3). На кінцях капсули знаходяться півсфери, які виходять шляхом розбиття конуса на частини по висоті і уздовж підстави, після цього нормалізуємо координати всіх вершин так що б вони лежали на нашій сфері та отримані прямокутники розбиваємо на полігони.
Малюнок 1.2 - Формули переходу з циліндричної в декартову систему координат
Малюнок 1.3 - Параметричне представлення окружності
Призма, в основі якої прямокутний прямокутник складається з 2 трикутників і 3 прямокутників, які легко розбиваються на полігони.
На малюнку 1.4 представлено каркасне зображення об'єкта.
Малюнок 1.4 - Каркасне зображення проектованого об'єкта
2. Опис алгоритмів афінних перетворень
Будь-яке зображення, що виводиться на екран монітора, складається з точок. Кожна точка в тривимірному просторі, в свою чергу містить три координати - X (абсциса), Y (ордината), Z (аппликата). Координати точки однозначно визначають її положення в системі координат. Ми будемо використовувати праву декартову прямокутну систему координат, загальний вигляд якої показаний на малюнку 2.1.
Малюнок 2.1 - Права декартова прямокутна система координат
Тут літерами x, y, z позначені позитивні напрямки осей Ox, Oy і Oz відповідно. Для виведення сцени на екран використовуються 3 системи координат:
- СК сцени;
- екранна СК;
- СК камери.
Початковою СК є СК сцени (або камери, при переході в вид з камери), кінцевої - екранна СК. Для переходу з однієї системи координат в іншу використовуються формули повороту, зсуву і масштабування.
Після виконання геометричних перетворень, координати (x, y, z) точки переходять в нові координати (x *, y *, z *). Загальні формули перетворення координат показані на малюнку 2.2. Але більш зручною є матрична форма запису тривимірного перетворення (рис. 2.3). Тут до координат (x, y, z) точки додалася четверта координата, що дорівнює одиниці і необхідна для виконання перетворень в матричної формі. Такі координати називаються однорідними.
Малюнок 2.2 - Формули перетворення координат точки
Малюнок 2.3 - Матрична форма запису тривимірного перетворення
2.1 Переміщення об'єкта
Одним з найпростіших і часто застосовуваних афінних перетворень є переміщення (зрушення, перенесення). Матриця A переміщення на вектор показана на малюнку 2.4. Алгоритм представлений на малюнку 2.5.
Малюнок 2.4 - Матриця переміщення
Малюнок 2.5 - Алгоритм перенесення об'єкта
2.2 Обертання об'єкта
Аффінним перетворенням, яке дозволяє дивитися на об'єкт під різними кутами і з різних сторін, є поворот об'єкта щодо координатних осей. Матриці поворотів навколо координатних осей показані на малюнках 2.6, 2.7, 2.8 і навколо довільної осі на малюнку 2.9.
Малюнок 2.6 - Матриця повороту навколо осі OX
Малюнок 2.7 - Матриця повороту навколо осі OY
Малюнок 2.8 - Матриця повороту навколо осі OZ
Малюнок 2.9 - Матриця повороту навколо довільної осі
Алгоритм повороту навколо довільної осі представлений на малюнку 2.10.
Малюнок 2.10 - Алгоритм повороту навколо довільної осі
2.3 Масштабування об'єкта
Іншим найважливішим аффінним перетворенням є масштабування. Масштабування - зміна розміру зображення зі збереженням пропорцій. Під масштабуванням мається на увазі як збільшення зображення, так і його зменшення. Матриця масштабування представлена на малюнку 2.11, а алгоритм масштабування на малюнку 2.12.
Малюнок 2.11 - Матриця масштабування
Малюнок 2.12 - Алгоритм масштабування
3. Опис алгоритмів проекційних перетворень
Проектування - це процес полу¬ченія зображення предмета на будь-якої поверх¬ності, отримані при цьому зображення, називають проекцією предмета.
Елементами, за допомогою яких здійснюється проектування, є (рис. 3.1):
- центр проектування - точка, з якої проводиться проектування;
- об'єкт проектування - зображуваний предмет;
- площину проекції - площину, на яку проводиться проектування;
- проектують промені - уявні прямі, за допомогою яких проводиться проектування.
Малюнок 3.1 - Центральне проектування [ 2 ]
Результатом проектування є зображення або проекція об'єкта. Розрізняють центральне і паралельне проектування. При центральному проектуванні всі проектують промені виходять з однієї точки - центру проектування, що знаходиться на певній відстані від площини проекцій (рисунок 3.1). При паралельному проектуванні всі проектують промені паралельні між собою. На малюнку 3.2 показано, як виходить паралельна прямокутна проекція. Центр проектування передбачається умовно віддаленим у нескінченність. Тоді паралельні промені відкинуть на площину проекцій тінь, яку можна прийняти за паралельну проекцію зображуваного предмета.
Малюнок 3.2 - Паралельне прямокутне проектування [ 2 ]
У проекті реалізовано перемикання між центральним і паралельним проектуванням. Відмінності при реалізації системи проектування з'являються при обчисленні координат проекцій на аксонометрическую площину проекцій камери. Ця площина має розміри (-1, + 1) по ширині і (-1 / ar, + 1 / ar) по висоті, де ar - Співвідношення сторін. Якщо при центральному проектуванні має місце формула, показана на малюнку 3.3, то для паралельного проектування справедлива формула, представлена на малюнку 3.4.
Малюнок 3.3 - Формула обчислення координат проекцій при центральному проектуванні
Малюнок 3.4 - Формула обчислення координат проекцій при паралельному проектуванні
У цій формулі a - половина ширини вікна виведення, а b - половина його висоти.
4. Опис алгоритмів довільних перетворень камери
Для побудови зображення на екранній площині використовується модель представлення за допомогою камери. Вона відповідає за надання користувачеві найпотужнішого механізму руху серед об'єктів сцени.
Камера задається наступними параметрами:
- кутом огляду;
- фокусною відстанню (від точки знаходження камери до площини, на яку ми проектуємо);
- ближніми і далекими площинами, які беруть участь в відсіканні по піраміді видимості.
Для камери були реалізовані: поворот, зсув і панорамування.
Камера розташована в певній точці простору, а також має цільову точку. На підставі цих двох точок розраховуються три вектори: вгору, вправо і вперед, які однозначно визначають напрямок камери і утворюють осі системи координат камери (рисунок 4.1).
Малюнок 4.1 - Камера [ 4 ]
Отримуємо з МСК координати точок об'єкта в системі координат камери. Схема представлена на малюнку 4.2.
Малюнок 4.2 - Отримання координат точок об'єкта в СК камери [ 4 ]
Основні функції для роботи з камерою представлені на малюнках 4.3, 4.4, 4.5.
Малюнок 4.3 - Функція знаходження матриці виду
Малюнок 4.4 - Функції обертання навколо точки цілі
Малюнок 4.5 - Функції обертання камери навколо своїх осей
Для того щоб отримати координати точки, представленої в світових координатах, в координатах камери необхідно цю точку помножити на матрицю камери трансформації з МСК. Крапку має бути поданий в однорідних координатах. Матриця трансформації камери приведена на малюнку 4.6. У цій матриці U - вектор «вправо», V - вектор «вгору», N - вектор «вперед», camPos - позиція камери в МСК.
Малюнок 4.6 - Матриця камери трансформації з МСК в СК камери
Після отримання координат об'єкту в системі координат камери отримуємо аксонометрическую проекцію об'єкта на площині проекцій камери. На малюнку 4.7 приведена спрощена двовимірна проекція площини огляду на площину xz. Приймемо кут огляду FOV рівним 90 градусів, а відстань від камери до площини проекцій d рівним 1.
Малюнок 4.7 - Спрощена двовимірна проекція площини огляду на площину xz [ 4 ]
На малюнку 4.8 показаний приклад побудови аксонометричного перетворення.
Малюнок 4.8 - Приклад побудови аксонометричного перетворення [ 4 ]
Перед перебуванням перспективної проекції, потрібно відсікти полігони по піраміді видимості (рис. 4.9).
Малюнок 4.9 - Піраміда видимості камери [ 4 ]
Алгоритм перспективного проектування об'єкта і відсікання по піраміді видимості представлений на малюнку 4.10.
Малюнок 4.10 - Алгоритм перспективного проектування
5. Програмна реалізація
Приклад введення параметрів об'єкта представлений на малюнку 5.1
Малюнок 5.1 - Введення установок об'єкта
Приклади роботи програми представлені на малюнках 5.2, 5.3, 5.4, 5.5.
Малюнок 5.2 - Робота програми, приклад 1
Малюнок 5.3 - Робота програми, приклад 2
Малюнок 5.4 - Робота програми, приклад 3
Малюнок 5.5 - Робота програми, приклад 4
висновки
В ході розробки проекту була створена програмна система, яку можна використовувати як наочний приклад проектування найпростіших тривимірних систем по візуалізації деяких об'єктів. Також система дозволяє продемонструвати на прикладі роботу деяких основних алгоритмів комп'ютерної графіки, запрограмованих на мові високого рівня.
У розробленій системі забезпечено наявність настроюється апарата проектування, реалізоване паралельне і центральне проектування. Реалізована можливість управління камерою, наявність засобів збереження і завантаження параметрів об'єкта.
Перевагами даної системи є її простота, наочність, досить зручний інтерфейс і простота уявлення східних і вихідних даних програми. Недоліків програми є її низька захищеність зовнішніх впливів і великий розмір коду.
Корисні ресурси
- Роджерс Д. «Алгоритмічні основи машинної графіки»: Пер. з англ.-М.: Світ, 1989.-512с.
- Рождерс Д., Адамс Дж. «Математичні основи машинної графіки»: Пер. з англ М .: Мир, 2001.-604с.
- Вангер Ф.С. «Довідник по тривимірному моделюванню», СПб, 2002 р.
- Ламот Андре. Програмування тривимірних ігор для Windows. Поради професіонала по тривимірній графіці і растеризации .: Пер. з англ.-М .: Видавничий дім «Вільямс», 2004.-1424с .: іл.- Парал. тит. англ.
- Френк Д. Місяць «Введення в програмування тривимірних ігор з DirectX 9.0», Wordware Publishing, 2003.
- Alan Watt «3D Computer Graphics» 3-е изд. Addison-Wesley, 2000.
- Форум для розробників ігор і програмістів 3D графіки [Електронний ресурс]: - Режим доступу: http://www.gamedev.ru