ОРГАНИЗАЦИЯ ИМПОРТА 3D-МОДЕЛИ ИЗ 3D-РЕДАКТОРА В ПРОГРАММНЫЙ КОД - Студенческий научный форум

VI Международная студенческая научная конференция Студенческий научный форум - 2014

ОРГАНИЗАЦИЯ ИМПОРТА 3D-МОДЕЛИ ИЗ 3D-РЕДАКТОРА В ПРОГРАММНЫЙ КОД

Котов В.В. 1
1Волжский политехнический институт (филиал) ФГБОУ ВПО "Волгоградский государственный технический университет
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

В случае использования различных 3D-редакторов для создания сложных трехмерных моделей возникает проблема переноса таких моделей в программный код, написанный с использованием функций графической библиотеки OpenGL. Для решения этой проблемы можно использовать конвертер координат, реализованный по следующему алгоритму.

В качестве файла-источника будем использовать файл в obj-формате, т.к. т.к. это один из самых распространенных текстовых форматов для хранения данных. Файл-приемник – программный код, использующий функции OpenGL. Тогда процесс преобразования одного формата в другой, удобный для чтения OpenGL, можно описать следующим образом. Чтение файла-источника происходит построчно, при этом индексы в конце файла указывают на массив координат в его начале. Это обусловлено стандартной формой хранения графической информации в obj-формате. В файле-приемнике объявляем три двумерных массива, в которых и будут храниться конвертированные данные: массив для координат каркаса модели, массив для координат нормалей и массив текстур. Каждая строка массива будет рассчитана на три значения (координаты по трем осям), количество таких строк – максимально. Таким же образом создаем массивы для хранения трех индексов, но с учетом того, что индексы у нас целочисленные. Тогда конвертация трехмерной модели будет проходить в два этапа:

  1. считывание и обработка исходного файла;

  2. построение файла с кодом.

На первом этапе считывается одна (текущая) модель и данные о ней распределяются по массивам. Затем осуществляется обработка массивов по отдельности. Когда мы доходим до массива индексов (символ “f”), то поиск координат отключается, и считывание индексов происходит по следующему алгоритму:

  1. читаем первое число за пробелом, вносим его в массив индексов каркаса (под соответствующим номером) как первый элемент массива (координата Х);

  2. определяем наличие знака разделителя («/» или «//», т.к. мы не знаем вид исходного файла) и проверяем, есть ли у нас структура с координатами текстур;

  3. записываем число после знака разделителя в массив с индексами текстур (или нормалей, если текстур нет) в первый элемент массива;

  4. снова проверяем на наличие разделителя, и, при его обнаружении, формируем массив нормалей;

  5. выполняем поиск пробела и число, следующее за пробелом, записываем в массивы с тем же номером и в том же порядке (сначала вершины, потом текстуры, потом нормали), но уже во второй элемент массива (т.е. формируем координаты оси Y);

  6. повторяем те же действия для оси Z.

Выполняем вышеуказанные действия до обнаружения знака начала комментариев (#), новых координат вершин (v) или конца файла. Затем осуществляем вывод нужного кода в следующем порядке:

  • сначала выводим оформление кода: GLfloat pVerts1[]= {

  • затем выводим координаты (по три в строке, что удобнее для восприятия).

В качестве индекса текущего элемента указываем формулу, с помощью которой можно будет сортировать значения: второй индекс равен 0, следовательно, мы работаем с осью Х; для оси Y второй индекс будет равен 1, а для оси Z - 2. При этом учитывая стандартную индексацию в obj-формате и языке программирования, в программу на котором конвертируется модель. Таким образом, происходит построение нового файла с кодом, включая вывод блоков текстур и нормалей.

Предложенный способ конвертации 3D-моделей из 3D-редакторов в программу с использованием Opengl имеет некоторые недостатки. Самый существенный из них – описание модели непосредственно в программном коде. В результате, если моделей много (или они высокополигональные), то компиляция кода может быть очень долгой, что очень сильно затрудняет отладку. Но для небольших студенческих проектов, ориентированных на изучение возможностей визуализации с помощью графической библиотеки Opengl, данный вариант решения придется очень кстати.

Библиографический список

  1. Трифанов А.И., Абрамова О.Ф. Реализация собственного метода визуализации водной поверхности «скользящая текстура» // «Современные наукоёмкие технологии». - 2013. - № 8 (ч. 1). - C. 96-97

  2. Абрамова О. Ф., Использование мультимедийных технологий в процессе обучения дисциплине «Компьютерная графика»// О. Ф. Абрамова, С. В. Белова// Журнал «Успехи современного естествознания» №3, 2012 год, стр. 90-91.

  3. Абрамова О. Ф., Компьютерная графика : конспект лекций для студентов направлений 230100.62 "Информатика и вычислительная техника" и 231000.62 "Программная инженерия" [Электронный ресурс] // ВПИ (филиал) ВолгГТУ // Учебные пособия : сб. Серия "Естественнонаучные и технические дисциплины". Вып. 3. - 1электрон. опт. диск (CD-ROM), формат pdf. - Волжский, 2012. - 165 с.

Просмотров работы: 1035