Класс QBlendedClipAnimator
(Qt3DAnimation::QBlendedClipAnimator)QBlendedClipAnimator — это компонент, обеспечивающий возможности воспроизведения анимации дерева узлов смешения. Подробнее...
| Заголовок: | #include <QBlendedClipAnimator> |
| qmake: | QT += 3danimation |
| С тех пор: | Qt 5.9 |
| Инициализируется: | BlendedClipAnimator |
| Наследует: | Qt3DAnimation::QAbstractClipAnimator |
Свойства
- blendTree : Qt3DAnimation::QAbstractClipBlendNode *
- 3 свойства унаследованы от Qt3DAnimation::QAbstractClipAnimator
- 1 свойство унаследовано от Qt3DCore::QComponent
- 3 свойства унаследованы от Qt3DCore::QNode
- 1 свойство унаследовано от QObject
Открытые функции
| QBlendedClipAnimator(Qt3DCore::QNode *parent = nullptr) | |
| ~QBlendedClipAnimator() | |
| QAbstractClipBlendNode * | blendTree() const |
- 3 открытых функции унаследованы от Qt3DAnimation::QAbstractClipAnimator
- 2 открытых функции унаследованы от Qt3DCore::QComponent
- 11 открытых функций унаследованы от Qt3DCore::QNode
- 32 открытых функции унаследованы от QObject
Открытые слоты
| void | setBlendTree(QAbstractClipBlendNode *blendTree) |
- 5 открытых слотов унаследованы от Qt3DAnimation::QAbstractClipAnimator
- 1 открытый слот унаследован от Qt3DCore::QComponent
- 3 открытых слота унаследованы от Qt3DCore::QNode
- 1 открытый слот унаследован от QObject
Сигналы
| void | blendTreeChanged(QAbstractClipBlendNode *blendTree) |
- 3 сигнала унаследованы от Qt3DAnimation::QAbstractClipAnimator
- 3 сигнала унаследованы от Qt3DCore::QComponent
- 4 сигнала унаследованы от Qt3DCore::QNode
- 2 сигнала унаследованы от QObject
Дополнительные унаследованные члены
- 11 статических открытых членов унаследованы от QObject
- 2 защищенных функции унаследованы от Qt3DCore::QNode
- 9 защищенных функций унаследованы от QObject
Подробное описание
QBlendedClipAnimator — это компонент, предоставляющий возможности воспроизведения анимации дерева узлов смешения.
Экземпляр 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, мы можем получить двумерный континуум возможных анимаций:
(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 *
Это свойство содержит корень дерева анимационного смешения, которое будет вычисляться перед интерполяцией аниматором.
Функции доступа:
| QAbstractClipBlendNode * | blendTree() const |
| void | setBlendTree(QAbstractClipBlendNode *blendTree) |
Сигнал уведомления:
| void | blendTreeChanged(QAbstractClipBlendNode *blendTree) |
Документация по функциям-членам
QBlendedClipAnimator::QBlendedClipAnimator(Qt3DCore::QNode *parent = nullptr)
Конструктор по умолчанию для экземпляра QBlendedClipAnimator.
QBlendedClipAnimator::~QBlendedClipAnimator()
Уничтожает экземпляр QBlendedClipAnimator.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qt3danimation-qblendedclipanimator.html