Загрузка данных масс и пружин из .X файла

Не беря во внимание данные меша, которые вы можете загрузить из .X файла, что еще полезного может в нем содержаться? Ну, для начала, данные меша не содержат информации о массе точек одежды. А как насчет тех пружин, которые возможно вы захотите добавить в одежду для обеспечения дополнительной жесткости?

Хорошо, поводов для беспокойства нет - .X замечательно подходит для хранения дополнительных данных одежды, таких как значения масс точек и используемые пружины. Добавив два небольших шаблона в файл .X и набор классов в исходные файлы, получение дополнительных данных о массах точек и пружинах становится очень простым.

Два шаблона определяются следующим образом (с определением макроса GUID, используемым в исходном коде):

// DEFINE_GUID(ClothMasses, // 0xf5ad0f93, 0x9bf2, 0x4bcf,

// 0xb7, 0xcf, 0xd6, 0x8c, 0xd6, 0xb5, 0x41, 0x56); template ClothMasses {

<F5AD0F9 3-9BF2-4bcf-B7CF-D6 8CD6B5 415 6>

DWORD NumPoints; // # значений масс точек

array FLOAT Mass[NumPoints]; // значения масс

}

// DEFINE_GUID(ClothSprings, // 0x8c08b088, 0x728e, 0x46c8,

// 0xbe, 0x87, 0x72, 0x67, 0x2b, 0x81, 0xdb, 0x11); template ClothSprings {

<8C08B088-728E-46c8-BE87-72672B81DB11>

DWORD NumSprings; // # загружаемых пружин

DWORD NumVertices; // NumSprings * 2

array DWORD Vertex[NumVertices]; // используемые точки пружин

}

Первый шаблон ClothMasses содержит две переменные. Первая переменная NumPoints соответствует количеству точек, содержащихся в меше, и количеству значений масс, содержащихся в объекте. Второй объект Mass является массивом значений масс точек, которые могут меняться от 0 (точка прикреплена к месту) до 1.

Вот пример объекта данных, который использует шаблон ClothMasses для хранения шести значений масс точек:

ClothMasses { 6;

1.0, 0.0, 0.0, 1.0, 1.0, 1.0;

}

Список значений масс соответствует точкам меша одежды - первое значение массы используется для первой точки одежды, второе для второй и т. д. В моем примере, первое, четвертое, пятое и шестое значения масс установлены в 1, в то время как второе и третье установлены в 0.

Второй приведенный шаблон ClothSprings используется для определения точек меша одежды, которые соединяют пружины. Переменная NumSprings используется для задания количества определяемых пружин, а переменная NumVertices задает, на сколько вершин (точек) влияют пружины. Num Vertices должно всегда равняться удвоенному количеству пружин. Наконец, Vertex является массивом значений индексов, определяющих соединяемые точки.

Предположим, что вы хотите определить три пружины, соединяющие шесть вершин. Вот пример объекта данных, который соединяет 0 и 1, 1 и 2, 2и0 точки.

ClothSprings { 3;

6;

0,1, 1,2, 2,0;

}

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

Добавление дополнительных пружин || Оглавление || Создание анализатора .X данных одежды