Данные морфируемой анимации являются чуждыми формату файла .X, они не существуют официально. По этой причине пришло время напрячь мозги и изобрести собственный шаблон данных морфируемой анимации. Выбросите из головы видения истерического хохота злобных ученых при мысли о создании дикого шаблона данных анимации, вам просто необходимо сделать несколько простых шагов для его создания.
Если вы помните, в главе 1 упоминалось, что морфирующая анимация требует двух мешей - исходного и целевого. Значение времени используется для морфинга исходного меша в целевой. Задав диапазон значений времени (ключевых кадров), вы можете использовать интерполяцию для морфинга исходного меша в целевой, который вы визуализируете. Это означает, что вам необходимо определить шаблон ключевого кадра морфируемой анимации, который бы содержал значение времени и меше, используе-мыи в качестве целевого и исходного (для последующих и предыдущих ключей) для морфинга. Для каждого ключа определяется один меш. Если перед ключом есть другой ключ, то текущий меш является целевым при морфинге. Если после ключа есть еще ключи, то текущий меш определяет исходный меш при морфинге.
Следующие два шаблона должны подойти для хранения данных морфируемой анимации в .X:
templateMorphAnimationKey {
<2 7 4 6B5 8A-B3 75-4cc3-8D2 3-7D0 94D3C7C67> DWORD Time; // Время ключа
STRING MeshName; // Используемый меш (имя экземпляра)
}
templateMorphAnimationSet
{
<0892DE81-915A-4f34-B503-F7C397CB9E06> DWORD NumKeys; // # ключей в анимации array MorphAnimationKey Keys[NumKeys];
}
Конечно же, каждому шаблону необходимо соответствующее объявление GUID в исходном коде, так что добавьте следующий код в начало основного исходного файла (или куда сочтете нужным):
// {2 74 6B58A-B3 75-4cc3-8D2 3-7D09 4D3C7C67} DEFINE_GUID(MorphAnimationKey,
0х2746Ъ58а, 0хЬ375, 0х4сс3,
0x8d, 0x23, 0x7d, 0x9,
0x4d, 0х3с, 0х7с, 0x67);
{0892DE81-915A-4f34-B503-F7C3 9 7CB9E0 6} DEFINE_GUID(MorphAnimationSet,
0x892de81, 0x915a, 0x4f34,
0xb5, 0x3, 0xf7, 0хс3,
0x97, 0xcb, 0x9e, 0x6);
Комментарии в каждом из двух шаблонов говорят сами за себя, но давайте рассмотрим их подробнее. В MorphAnimationKey определены две переменные - Time, содержащая значение времени в анимации (время ключа, обычно задаваемое в миллисекундах), и MeshName, типа STRING, которая содержит имя меша, используемого при морфинге.
Замечание. Вы заметите, что шаблон MorphAnimationKey определяет имя меша как тип STRING, а не ссылку на шаблон. Это означает, что вам необходимо сопоставить имя меша с ключом анимации после загрузки ключей морфирующей анимации.
Что же касается шаблона MorphAnimationSet, он содержит всего две переменные. Первая их них, NumKeys, является количеством объектов MorphAnimationKeys, содержащихся в анимации. Вторая переменная, Keys, является массивом, содержащим данные каждого объекта MorphAnimationKey, используемого в анимации.
После того как мы объявили шаблоны, давайте посмотрим на то, как использовать их для хранения данных морфируемой анимации. В качестве небольшого примера использования созданных шаблонов определим простую анимацию. В начале необходимо задать меши, с которыми будем работать:
Mesh MyMeshl {
// Здесь располагаются данные меша
}
Mesh MyMesh2 {
// Здесь располагаются данные меша
}
Mesh MyMesh3 {
// Здесь располагаются данные меша
}
Для упрощения я не стал приводить данные заданных мешей, а просто показал вам как создавать объекты Mesh для дальнейшего использования. Эти три объекта Mesh называются MyMeshl, MyMesh2, MyMesh3. Для данных анимации я хочу определить две анимации, названные MyAnimationl и MyAnimation2.
MorphAnimationSet MyAnimationl {
2;
0; "MyMeshl"; , 500; "MyMesh2";,
}
MorphAnimationSet MyAnimation2 {
4;
0; "MyMeshl"; , 500 ; "MyMesh2"; , 1000; "MyMesh3";, 1500; "MyMesh2";;
}8,8
Первая анимация, MyAnimationl, содержит два ключа. Первый ключ расположен в нулевом моменте времени и использует MyMeshl в качестве исходного меша. Второй ключ, расположенный во время 500, использует MyMesh2 в качестве целевого меша. Таким образом анимация длится 500 временных единиц.
Вторая анимация, MyAnimation2, содержит четыре ключа. Эти ключи, расположенные в 500 единицах измерения времени друг от друга, используют все три меша. Если вы хотите обновить анимацию в момент времени 700, вам необходимо использовать MyMesh2 в качестве исходного меша и MyMesh3 в качестве целевого меша в морфируемой анимации. Значение скаляра, необходимого для морфинга, вычисляется на основе значений времени ключей.
Хорошо, это все просто для понимания. А вот часть, в которой вы фактически загружаете данные анимации, может быть немного тяжела.
⇐Использование наборов морфируемой анимации || Оглавление || Загрузка данных морфируемой анимации⇒