Пока что вы можете использовать четыре типа ключей в наборах анимаций, определяемых значением от 0 до 4, приведенном в .X файле после ссылки фрейма шаблона AnimationKey. Этими четырьмя значениями ключей являются:

• Ключи вращения (тип 0). Это кватернионы, хранимые в виде w, х, у и z.

• Ключи масштабирования (тип 1). Вы можете использовать эти ключи для анимирования процесса масштабирования. Ключи масштабирования используют три компонента для масштабирования по осям х, у и z.

• Ключи перемещения (тип 2). Эти ключи задают положение в трехмерном пространстве, используя координаты х, уи z. Вы можете хранить эти три значения как вектор.

• Ключи матрицы преобразования (тип 4). Вы можете использовать этот ключ для объединения всех преобразований в матрицу. Этот ключ использует 16 вещественных значений, представляющих собой однородную матрицу преобразования 4x4.

Возвращаясь к предыдущим объектам Animation, вы можете увидеть, что самый первый объект AnimationKey (который влияет на кость BipOl) определяет ключ матрицы преобразования (представленный значением 4) так:

{Bip01} AnimationKey { 4; 3 ;

0; 16; 1.00000, 0.00000, 0.00000, 0.00000,

0.00000, 1.00000, 0.00000, 0.00000,

0.00000, 0.00000, 1.00000, 0.00000,

0.00000, 0.00000, 0.00000, 1.00000;;, 1000; 16; 1.00000, 0.00000, 0.00000, 0.00000,

0.00000, 1.00000, 0.00000, 0.00000,

0.00000, 0.00000, 1.00000, 0.00000,

0.00000, 0.00000, 0.00000, 1.00000;;, 2000; 16; 1.00000, 0.00000, 0.00000, 0.00000,

0.00000, 1.00000, 0.00000, 0.00000,

0.00000, 0.00000, 1.00000, 0.00000,

0.00000, 0.00000, 0.00000, 1.00000;;;

}

Второй объект AnimationKey (влияющий на кость Bip01_LeftArm) использует три ключа: перемещения (значение 2), масштабирования (значение 1) и вращения (значение 0).

{Bip01_LeftArm} AnimationKey {

0;

1;

0; 4; 1.00000, 0.000000, 0.00000, 0.000000;;;

}

AnimationKey {

1; 1;

0; 4; 1.000000, 1.00000, 1.000000;;;

AnimationKey { 2; 1;

0; 3; 0.000000, 0.00000, 0.000000;;;

}

Как вы уже могли предположить, объект Animation может иметь неограниченное количество объектов AnimationKey, каждый из которых использует определенный тип ключа. После значения типа ключа (0=вращения, ^масштабирования, 2=перемещения, 4=матрицы) следует количество ключей, используемых для анимирования заданной кости. Для первого набора костей (BipOl) задано три ключа матричного типа, в то время как для оставшегося объекта AnimationKey (влияющего на Bip01_LeftArm), используется только один ключ для каждого типа преобразования (вращения, масштабирования и перемещения).

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

AnimationKey {

2; // Тип ключа

1; // # ключей

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

3; // # значений данных ключа

10.00000, 20.00000, 30.00000;;; // данные ключа }

Первое значение, 2, означает, что ключ используется для хранения перемещения. 1 означает, что только один ключ задан. Первый и единственный ключ расположен в момент времени, равный 0. После времени идет значение 3, которое указывает, что после него последует три числа (10,20 и 30). Эти три числа представляют собой координаты, используемые для заданного времени анимации.

Возвращаясь к ранее приведенному примеру, вы можете видеть, что первый ключ анимации (ключ преобразования) содержит три матрицы, используемые в моменты времени, равные 0, 1000 и 2000. Именно в эти моменты при анимации вы будете менять матрицы преобразования для кости Bip01.

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

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

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

Использование ключей при анимации || Оглавление || Считывание данных анимации из .X файлов