Sur cette page

Qt3DAnimation::QBlendedClipAnimator Class

class Qt3DAnimation::QBlendedClipAnimator

QBlendedClipAnimator est un composant offrant des capacités de lecture d'animation d'un arbre de nœuds de fusion. Plus d'informations...

En-tête : #include <QBlendedClipAnimator>
CMake : find_package(Qt6 REQUIRED COMPONENTS 3danimation)
target_link_libraries(mytarget PRIVATE Qt6::3danimation)
qmake : QT += 3danimation
En QML : BlendedClipAnimator
Hérite : Qt3DAnimation::QAbstractClipAnimator
Statut : Déclassé

Propriétés

  • blendTree : Qt3DAnimation::QAbstractClipBlendNode*

Fonctions publiques

Qt3DAnimation::QAbstractClipBlendNode *blendTree() const

Emplacements publics

void setBlendTree(Qt3DAnimation::QAbstractClipBlendNode *blendTree)

Signaux

void blendTreeChanged(Qt3DAnimation::QAbstractClipBlendNode *blendTree)

Description détaillée

Une instance de QBlendedClipAnimator peut être agrégée par une QEntity pour ajouter la possibilité de lire des clips d'animation et d'appliquer les valeurs d'animation calculées aux propriétés des QObjects.

Alors qu'un site QClipAnimator obtient ses données d'animation à partir d'un seul clip d'animation, QBlendedClipAnimator peut combiner plusieurs clips. Les données d'animation sont obtenues en évaluant ce que l'on appelle un arbre de fusion. Un arbre de fusion est une structure arborescente hiérarchique dans laquelle les nœuds feuilles sont des nœuds de valeur qui encapsulent un clip d'animation (QAbstractAnimationClip) ; et les nœuds internes représentent les opérations de fusion qui opèrent sur les nœuds pointés par leurs propriétés d'opérande.

Pour associer un arbre de fusion à un QBlendedClipAnimator, définissez la propriété blendTree de l'animateur de manière à ce qu'elle pointe vers le nœud racine de votre arbre de fusion :

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

Un arbre de fusion peut être construit à partir des types de nœuds suivants :

Remarque : l'arbre de nœuds de fusion ne doit être modifié que lorsque l'animateur n'est pas en cours d'exécution.

Des types de nœuds supplémentaires seront ajoutés au fil du temps.

Prenons l'exemple de l'arbre de fusion suivant :

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

Il peut être créé et utilisé comme suit :

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

En créant un ensemble de clips d'animation et en les mélangeant dynamiquement au moment de l'exécution à l'aide d'un arbre de fusion, nous ouvrons un vaste ensemble d'animations possibles. L'arbre de mélange ci-dessus, où alpha est le facteur additif et bêta le facteur de mélange lerp, permet d'obtenir un continuum d'animations possibles en 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

Des arbres de fusion plus complexes offrent encore plus de flexibilité pour combiner vos clips d'animation. Notez que les valeurs utilisées pour contrôler l'arbre de fusion (alpha et bêta ci-dessus) sont de simples propriétés des nœuds de fusion. Cela signifie que ces propriétés peuvent également être contrôlées par le cadre d'animation.

Documentation sur les propriétés

blendTree : Qt3DAnimation::QAbstractClipBlendNode*

Cette propriété contient la racine de l'arbre de mélange de l'animation qui sera évaluée avant d'être interpolée par l'animateur.

Fonctions d'accès :

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

Signal du notificateur :

void blendTreeChanged(Qt3DAnimation::QAbstractClipBlendNode *blendTree)

© 2026 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.