Spec-Zone.ru › Qt

Класс QBlendedClipAnimator

класс Qt3DAnimation::QBlendedClipAnimator

QBlendedClipAnimator — это компонент, предоставляющий возможности воспроизведения анимации дерева узлов смешивания. Подробнее...

Заголовок: #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);

Дерево смешивания можно построить из следующих типов узлов:

Примечание: Дерево узлов смешивания следует редактировать только тогда, когда аниматор не запущен.

  • Qt3DAnimation::QClipBlendValue
  • Qt3DAnimation::QLerpClipBlend
  • Qt3DAnimation::QAdditiveClipBlend

Дополнительные типы узлов будут добавлены со временем.

Например, рассмотрим следующее дерево смешивания:

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);

Создание набора анимационных клипов и динамическое смешивание между ними во время выполнения с помощью дерева смешивания открывает огромный набор возможных результатов анимации. В качестве нескольких простых примеров вышеуказанного дерева смешивания, где alpha — это аддитивный множитель, а beta — множитель смешивания 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

Более сложные деревья смешивания предлагают еще большую гибкость для комбинирования анимационных клипов. Обратите внимание, что значения, используемые для управления деревом смешивания (alpha и beta выше), являются простыми свойствами узлов смешивания. Это означает, что эти свойства сами также могут контролироваться механизмом анимации.

Документация по свойствам

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.2/qt3danimation-qblendedclipanimator.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API