Skip to main content.

(x) 3D Model Format – новый древовидный формат хранения безтекстурных 3D-моделей, параметры которых изменяются в режиме РВ

Пехотин Е.В.

Источник: Комп'ютерний моніторинг ті інформаційні технології «КМІТ-2008» // Збірка тез доповідей IV Міжнародної наукової конференції студентів, аспірантів і молодих вчених (13-14 травня 2008 р.) / Уклад.: Хоруженко А.С. – Донецьк: ДонНТУ, 2008. – с. 243-244.

Данный формат был разработан в рамках курса «Графическое и геометрическое моделирование и интерактивные системы» и предназначен для хранения моделей объектов 3D-engine, имеющих изменяющиеся параметры собственных частей. Здесь под моделью понимается набор униэдров, скорее всего связанных в конкретных точках, каждый из которых имеет собственную ЛСК, строящуюся по общим для всей модели правилам и каждая точка которого масштабируется вдоль осей некоторыми параметрами из множества параметров, имеющегося у модели. Под униэдром понимается объект, определенный в собственной ЛСК, в котором для масштабирования любой его точки используется одно и то же подмножество из множества параметров. Из определения видно, что модель имеет множество параметров и набор каким-либо образом взаимосвязанных униэдров, каждый из которых содержит информацию об используемых для каждой из своих точек параметров, и взаимосвязи с другими униэдрами. На рисунке 1 представлен пример такой модели.

Пример описываемой форматом модели

Рисунок 1 – Пример модели, которую можно описать форматом

Формат модели x3d model format состоит из трех частей (имеется в виду версия для хранения в файле; на текущий момент последняя версия формата – 0.9):

  1. Заголовка модели, содержащего сигнатуру формата («X3DM»), версию формата, общий размер файла, ID модели (32-битное число, которое копируется во все объекты, построенные из модели), флаги (для данной версии флагов не имеется), контрольная сумма (для данной версии алгоритм подсчета не определен), количество переменных модели и смещение в файле на корневой униэдр модели;
  2. Названия переменных, представленные в виде массива, содержащего asciiz-строки переменной длины, после последнего элемента стоит завершающий ноль и выравнивание на границу двойного слова (4 байта);
  3. Униэдры модели, описываемые в виде n-арного дерева с одним корнем и переменным количеством исходящих из каждого узла ветвей; структура каждого униэдра модели включает в себя полный размер описания униэдра, поле флагов и атрибутов, 32-битный (включая альфу) цвет всех граней униэдра, центральную точку униэдра (точка, по которой униэдр стыкуется с родительским), количества примыкающих униэдров, используемых переменных, точек униэдра и его граней. Все точки любого униэдра принадлежат кубику (0;0;0) - (1.0;1.0;1.0) и по внутреннему формату представляют собой Intel’овские числа с плавающей точкой одинарной точности (32 бита), float’ы в Си. После структуры идет 4 массива: дочерних униэдров, используемых переменных, точек и граней. Все массивы могут быть представлены в одном из двух видов (имеются специальные флаги): как массивы из элементов специальных структур для каждого вида, количество элементов указывается в структуре униэдра, и как состоящие из одного 32-битного значения, представляющего собой смещение на массив в файле; этот подход позволяет сэкономить большой объем памяти при хранении модели (особенно для прямоугольных параллелепипедов). Элемент массива примыкающих униэдров представляет собой пару: смещение на дочерний униэдр – точка примыкания. Массив используемых переменных в данной версии формата массив имеет вид фиксированной структуры из 3-х элементов (по 3 осям X-Y-Z), каждый элемент – это пара номер переменной – мультипликатор (на это число умножается значение переменной перед умножением на точки). Элемент массива точек представляет собой трехмерную точку (x, y, z), элемент массива граней представляет собой набор из трех индексов, каждый – номер точки в массиве точек – в формате используются треугольные грани.

Особенно следует отметить, что вся модель в этом формате по стандарту описывается в левой системе координат, а точки в гранях упорядочены по часовой стрелке (хотя могут использоваться и другие правила построения, т.к. загрузчик спроектирован так, чтобы СК и упорядочивание не влияло на процесс загрузки).

В результате работы получен эффективный формат данных, который может быть с успехом использован для хранения информации в системах обработки трехмерной графики.

Литература

  1. Вельтмандер П.В. Машинная графика: учебное пособие в 3-х книгах, книга 2. Основные алгоритмы / Носибирский ун-т, 1997, 193 с.
  2. Шикин Е.В., Боресков А.В. Компьютерная графика. Полигональные модели. – М.: Диалог-МИФИ, 2000, 464 с.
  3. Том Миллер. DirectX с управляемым кодом. Программирование игр и графика, Изд. дом КомБук, 2005, 386 с.