Завантаження тривимірних об’єктів у OpenGL

БібліотекаGLUTдозволяє створювати велику кількість3D-об'єктів. Також ми можемо будувати об'єкти вручну або за допомогою різних технік та методів. Тим не менш, для створення складних графічних сцен використовуються тривимірні об'єкти, створені у великих пакетах тривимірного моделювання, наприклад3D Studio Max. Експортуючи тривимірний об'єкт із пакета тривимірного моделювання, ми отримуємо файл, який зберігає геометричні дані, текстурні координати, джерела світла тощо. залежно від налаштувань експорту та формату файлу.

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

Метод зберігання геометрії у сторонніх файлах, безумовно, дуже зручний. Маючи клас завантаження тривимірних об'єктів, ми можемо змінювати геометрію сцени на ходу, змінюючи файл з описом тривимірного об'єкта.

Принцип зберігання геометрії3D-об'єкта зводиться до того, що об'єкт складається зNвузлів, кожен із яких є складовою загальної сцени. Вузол (або подобъект) є набір координат в тривимірному просторі. По суті, уявлення такого об'єкта можна розділити на два великі масиви. Адже сусідні полігони, як правило, використовують щонайменше одну загальну вершину.

Виходячи з цього, зберігати координати окремо для кожного полігону абсолютно не вигідно. Звідси і з'являються два геометричні масиви. Перший містить опис усіх вершин. Другий масив містить опис полігонів – кожен полігон описується 3 індексами координат, які ми маємо взяти з першого масиву.

Завантаження тривимірної моделі ми розглянемо з прикладу форматуASE. У цей формат можна легко зберегти тривимірну модель,використовуючи пакет тривимірного моделювання3D Studio Max. Формат є текстовим, і ви можете самостійно вивчити те, як описується експортована геометрія.

Так як ми реалізуємо завантаження тривимірної моделі для навчання, ми не використовуватимемо багато параметрів, що зберігаються в даному файлі. Нормалі ми порахуємо самостійно. Також ми завантажимо текстурні координати для завантаження текстури, накладеної на об'єкт.