QBlendedClipAnimator Class

class Qt3DAnimation::QBlendedClipAnimator

QBlendedClipAnimator ist eine Komponente, die die Wiedergabe von Animationen eines Baums von Überblendknoten ermöglicht. Mehr...

Kopfzeile: #include <QBlendedClipAnimator>
CMake: find_package(Qt6 REQUIRED COMPONENTS 3danimation)
target_link_libraries(mytarget PRIVATE Qt6::3danimation)
qmake: QT += 3danimation
In QML: BlendedClipAnimator
Vererbt: Qt3DAnimation::QAbstractClipAnimator
Status: Veraltet

Eigenschaften

  • blendTree : Qt3DAnimation::QAbstractClipBlendNode*

Öffentliche Funktionen

Qt3DAnimation::QAbstractClipBlendNode *blendTree() const

Öffentliche Slots

void setBlendTree(Qt3DAnimation::QAbstractClipBlendNode *blendTree)

Signale

void blendTreeChanged(Qt3DAnimation::QAbstractClipBlendNode *blendTree)

Detaillierte Beschreibung

Eine Instanz von QBlendedClipAnimator kann von einer QEntity aggregiert werden, um die Fähigkeit hinzuzufügen, Animationsclips abzuspielen und die berechneten Animationswerte auf Eigenschaften von QObjects anzuwenden.

Während QClipAnimator seine Animationsdaten aus einem einzelnen Animationsclip bezieht, kann QBlendedClipAnimator mehrere Clips zusammenfügen. Die Animationsdaten werden durch Auswertung eines so genannten Blend-Trees gewonnen. Ein Überblendungsbaum ist eine hierarchische Baumstruktur, bei der die Blattknoten Werteknoten sind, die einen Animationsclip (QAbstractAnimationClip) kapseln; und die internen Knoten stellen Überblendungsoperationen dar, die auf die Knoten wirken, auf die ihre Operandeneigenschaften verweisen.

Um einen Überblendungsbaum mit einem QBlendedClipAnimator zu verknüpfen, setzen Sie die Eigenschaft blendTree des Animators so, dass sie auf den Wurzelknoten Ihres Überblendungsbaums zeigt:

auto blendTreeRoot = new QAdditiveClipBlend();
...
auto animator = new QBlendedClipAnimator();
animator->setBlendTree(blendTreeRoot);

Ein Blend Tree kann aus den folgenden Knotentypen aufgebaut werden:

Hinweis: Der Blend-Knotenbaum sollte nur bearbeitet werden, wenn der Animator nicht läuft.

Weitere Knotentypen werden mit der Zeit hinzugefügt.

Betrachten Sie als Beispiel den folgenden Überblendungsbaum:

Clip0----
        |
        Lerp Node----
        |           |
Clip1----           Additive Node
                    |
            Clip2----

Dieser kann wie folgt erstellt und verwendet werden:

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

Durch das Erstellen einer Reihe von Animationsclips und das dynamische Überblenden zwischen ihnen zur Laufzeit mit einem Überblendungsbaum eröffnen wir eine riesige Menge möglicher resultierender Animationen. Einige einfache Beispiele für den obigen Überblendungsbaum, bei dem Alpha der additive Faktor und Beta der Überblendungsfaktor ist, ergeben ein 2D-Kontinuum an möglichen Animationen:

(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

Komplexere Überblendungsbäume bieten noch mehr Flexibilität bei der Kombination Ihrer Animationsclips. Beachten Sie, dass die Werte, die zur Steuerung des Überblendungsbaums verwendet werden (Alpha und Beta oben), einfache Eigenschaften der Überblendungsknoten sind. Das bedeutet, dass diese Eigenschaften selbst auch durch das Animations-Framework gesteuert werden können.

Dokumentation der Eigenschaften

blendTree : Qt3DAnimation::QAbstractClipBlendNode*

Diese Eigenschaft enthält die Wurzel des Animationsüberblendungsbaums, der ausgewertet wird, bevor er vom Animator interpoliert wird.

Zugriffsfunktionen:

Qt3DAnimation::QAbstractClipBlendNode *blendTree() const
void setBlendTree(Qt3DAnimation::QAbstractClipBlendNode *blendTree)

Benachrichtigungssignal:

void blendTreeChanged(Qt3DAnimation::QAbstractClipBlendNode *blendTree)

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.