Spec-Zone.ru › Qt 6.0

Класс 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);

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

Spec-Zone.ru

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