Urho3D класс AnimatedModel

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

Urho3D класс AnimatedModel представляет компонент анимированной сетки (3D модель). Он происходит от StaticModel и реализует скелетную и морфную вертексную/вершинную анимацию.

Директива препроцессора для подключ. заголовочн. файла:

#include <Urho3D/Graphics/AnimatedModel.h>

Использование

Для использ. скелетной анимации, на модель надо добавить 1 или несколько состояний анимации, и использовать их для управления анимацией. Ресурс анимации для использования указывается при создании.

Пример добавления AnimationState, и дальнейшая настройка этого для полного веса, и разрешение зацикливания проигрывания:

AnimationState* anim = mdl->addAnimationState(mCache->getResource<Animation>("Models/Jack_Walk.ani"));
anim->setLooped(true);
anim->setWeight(1.0f);

Увеличение временной позиции внутри функции обновления для фактического воспроизведения анимации:

AnimationState* anim = mdl->getAnimationState("Walk");
if (anim)
	anim->addTime(timeStep);

Метод getAnimationState поддерживает использования или полного имени ресурса, или просто имени анимации, хранимой внутри ресурса анимации. В приведенном выше примере используется последний.

Невидимые обновления

По-умолч. AnimatedModel не обновляет анимацию, если она не отображается. Это может иметь некоторые побочные эффекты, напр., если модель имеет скелетно прикрепленную дочернюю модель, и видна только дочерняя модель, анимация не будет обновляться. Кроме того, рейкаст в невидимую AnimatedModel не будет сообщать о правильных столкновениях костей, поскольку их положения не были обновлены. По этим причинам можно включить невидимые обновления анимации, вызвав setInvisibleLodFactor со значением больше 0. Для экономии процессорного времени значение фактора позволяет регулировать расстояние LOD для невидимого обновления. Напр., значение 2 будет применять LOD анимации, как если бы модель была в 2 раза дальше, чем она есть на самом деле.

Когда сцена запускается в режиме "headless", все AnimatedModels всегда будут обновляться, поскольку отсутствует концепция видимости.

Ограничения

Urho3D вообще не реализует программный скиннинг. Поэтому количество костей на подгеометрию модели (batch) ограничено доступными константами вершинного шейдера, и в настоящее время максимальное значение составляет 64. Если попытаться определить больше, выскакивает ошибка от инструментов преобразования модели.