Spec-Zone.ru › Qt 6.1

Класс 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, установите свойство animator's 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 — это множитель линейного смешивания, мы можем получить двухмерную непрерывность возможных анимаций:

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

Spec-Zone.ru

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