Класс QBlendedClipAnimator
класс Qt3DAnimation::QBlendedClipAnimatorQBlendedClipAnimator — это компонент, обеспечивающий воспроизведение анимации дерева узлов смешивания. Подробнее...
| Заголовок: | #include <QBlendedClipAnimator> |
| CMake: | find_package(Qt6 COMPONENTS 3danimation REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::3danimation) |
| qmake: | QT += 3danimation |
| С тех пор: | Qt 5.9 |
| Инициализируется: | BlendedClipAnimator |
| Наследует: | Qt3DAnimation::QAbstractClipAnimator |
Свойства
- blendTree : Qt3DAnimation::QAbstractClipBlendNode*
Открытые функции
| Qt3DAnimation::QAbstractClipBlendNode * | blendTree() const |
Открытые слоты
| void | setBlendTree(Qt3DAnimation::QAbstractClipBlendNode *blendTree) |
Сигналы
| void | blendTreeChanged(Qt3DAnimation::QAbstractClipBlendNode *blendTree) |
Подробное описание
Экземпляр QBlendedClipAnimator может быть агрегирован QEntity, чтобы добавить возможность воспроизводить анимационные клипы и применять рассчитанные значения анимации к свойствам QObjects.
В то время как QClipAnimator получает данные анимации из одного анимационного клипа, QBlendedClipAnimator может смешивать несколько клипов. Данные анимации получаются путем оценки так называемого дерева смешивания. Дерево смешивания — это иерархическая структура дерева, где листовые узлы — это узлы значений, которые инкапсулируют анимационный клип (QAbstractAnimationClip); а внутренние узлы представляют операции смешивания, которые действуют на узлы, на которые указывают их свойства операндов.
Чтобы связать дерево смешивания с QBlendedClipAnimator, установите свойство blendTree аниматора, чтобы указать на корневой узел вашего дерева смешивания:
auto blendTreeRoot = new QAdditiveClipBlend(); ... auto animator = new QBlendedClipAnimator(); animator->setBlendTree(blendTreeRoot);
Дерево смешивания можно построить из следующих типов узлов:
Примечание: Дерево узлов смешивания следует редактировать только в том случае, если аниматор не работает.
Дополнительные типы узлов будут добавляться со временем.
В качестве примера рассмотрим следующее дерево смешивания:
Clip0----
|
Lerp Node----
| |
Clip1---- Additive Node
|
Clip2---- Это можно создать и использовать следующим образом:
// Create leaf nodes of blend tree
auto clip0 = new QClipBlendValue(
new QAnimationClipLoader(QUrl::fromLocalFile("walk.json")));
auto clip1 = new QClipBlendValue(
new QAnimationClipLoader(QUrl::fromLocalFile("run.json")));
auto clip2 = new QClipBlendValue(
new QAnimationClipLoader(QUrl::fromLocalFile("wave-arm.json")));
// Create blend tree inner nodes
auto lerpNode = new QLerpClipBlend();
lerpNode->setStartClip(clip0);
lerpNode->setEndClip(clip1);
lerpNode->setBlendFactor(0.5f); // Half-walk, half-run
auto additiveNode = new QAdditiveClipBlend();
additiveNode->setBaseClip(lerpNode); // Comes from lerp sub-tree
additiveNode->setAdditiveClip(clip2);
additiveNode->setAdditiveFactor(1.0f); // Wave arm fully
// Run the animator
auto animator = new QBlendedClipAnimator();
animator->setBlendTree(additiveNode);
animator->setChannelMapper(...);
animator->setRunning(true); Авторство набора анимационных клипов и динамическое смешивание между ними во время выполнения с помощью дерева смешивания открывает огромный набор возможных анимаций. В качестве некоторых простых примеров вышеуказанного дерева смешивания, где альфа — аддитивный фактор, а бета — фактор смешивания lerp, мы можем получить 2D непрерывность возможных анимаций:
(alpha = 0, beta = 1) Running, No arm waving --- (alpha = 1, beta = 1) Running, Arm waving
| |
| |
| |
(alpha = 0, beta = 0) Walking, No arm waving --- (alpha = 0, beta = 1) Running, No arm waving Более сложные деревья смешивания предлагают еще большую гибкость для комбинирования ваших анимационных клипов. Обратите внимание, что значения, используемые для управления деревом смешивания (альфа и бета выше), являются простыми свойствами узлов смешивания. Это означает, что эти свойства сами по себе также могут контролироваться системой анимации.
Документация по свойствам
blendTree : Qt3DAnimation::QAbstractClipBlendNode*
Это свойство содержит корень дерева анимационного смешивания, которое будет оцениваться перед интерполяцией аниматором.
Функции доступа:
| Qt3DAnimation::QAbstractClipBlendNode * | blendTree() const |
| void | setBlendTree(Qt3DAnimation::QAbstractClipBlendNode *blendTree) |
Сигнал уведомления:
| void | blendTreeChanged(Qt3DAnimation::QAbstractClipBlendNode *blendTree) |
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qt3danimation-qblendedclipanimator.html