Создание шаблонов .X для морфируемой анимации

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

Если вы помните, в главе 1 упоминалось, что морфирующая анимация требует двух мешей - исходного и целевого. Значение времени используется для морфинга исходного меша в целевой. Задав диапазон значений времени (ключевых кадров), вы можете использовать интерполяцию для морфинга исходного меша в целевой, который вы визуализируете. Это означает, что вам необходимо определить шаблон ключевого кадра морфируемой анимации, который бы содержал значение времени и меше, используе-мыи в качестве целевого и исходного (для последующих и предыдущих ключей) для морфинга. Для каждого ключа определяется один меш. Если перед ключом есть другой ключ, то текущий меш является целевым при морфинге. Если после ключа есть еще ключи, то текущий меш определяет исходный меш при морфинге.

Следующие два шаблона должны подойти для хранения данных морфируемой анимации в .X:

template MorphAnimationKey {

<2746B58A-B375-4cc3-8D23-7D094D3C7C67>

DWORD Time; // Время ключа

STRING MeshName; // Используемый меш (имя экземпляра) }

template MorphAnimationSet {

<0892DE81-915A-4f34-B503-F7C397CB9E06>

DWORD NumKeys; // # ключей в анимации

array MorphAnimationKey Keys[NumKeys]; }

Конечно же, каждому шаблону необходимо соответствующее объявление GUID в исходном коде, так что добавьте следующий код в начало основного исходного файла (или куда сочтете нужным):

// {2746B58A-B375-4cc3-8D23-7D094D3C7C67} DEFINE_GUID(MorphAnimationKey,

0х2746b58а, 0хЬ375, 0х4сс3,

0x8d, 0x23, 0x7d, 0x9,

0x4d, 0х3с, 0х7с, 0x67);

{0892DE81-915A-4f34-B503-F7C3 97CB9E06} 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, используемого в анимации.

{mospagebreak}

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

Mesh MyMesh1 {

// Здесь располагаются данные меша }

Mesh MyMesh2 {

// Здесь располагаются данные меша }

Mesh MyMesh3 {

// Здесь располагаются данные меша }

Для упрощения я не стал приводить данные заданных мешей, а просто показал вам как создавать объекты Mesh для дальнейшего использования. Эти три объекта Mesh называются MyMesh1, MyMesh2, MyMesh3. Для данных анимации я хочу определить две анимации, названные MyAnimation1 и MyAnimation2.

MorphAnimationSet MyAnimation1 { 2;

0; "MyMesh1";, 500; "MyMesh2";, }

MorphAnimationSet MyAnimation2 { 4;

0; "MyMesh1";,

500; "MyMesh2";,

1000; "MyMesh3";,

1500; "MyMesh2";;

}8,8

Первая анимация, MyAnimation1, содержит два ключа. Первый ключ расположен в нулевом моменте времени и использует MyMesh1 в качестве исходного меша. Второй ключ, расположенный во время 500, использует MyMesh2 в качестве целевого меша. Таким образом анимация длится 500 временных единиц.

Вторая анимация, MyAnimation2, содержит четыре ключа. Эти ключи, расположенные в 500 единицах измерения времени друг от друга, используют все три меша. Если вы хотите обновить анимацию в момент времени 700, вам необходимо использовать MyMesh2 в качестве исходного меша и MyMesh3 в качестве целевого меша в морфируемой анимации. Значение скаляра, необходимого для морфинга, вычисляется на основе значений времени ключей.

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

27 августа 2010
Что еще почитать
Комментарии к новости

Написать ответ
Ваше имя

Ваш e-mail

Сообщение

Введите текст, который вы видите на картинке слева.

Регистр не важен. Нажмите, если не можете прочитать

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

Товары