Sur cette page

Qt3DAnimation::QBlendedClipAnimator Class

class Qt3DAnimation::QBlendedClipAnimator

QBlendedClipAnimator est un composant permettant la lecture d'animations à partir d'une arborescence de nœuds de fusion. En savoir plus...

En-tête : #include <qblendedclipanimator.h>
CMake : find_package(Qt6 REQUIRED COMPONENTS 3danimation)
target_link_libraries(mytarget PRIVATE Qt6::3danimation)
qmake : QT += 3danimation
En QML : BlendedClipAnimator
Hérite de : Qt3DAnimation::QAbstractClipAnimator
Statut : Aperçu technologique

Cette classe est en avant-première technologique et est susceptible d'être modifiée.

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 un QEntity afin d'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 ` QClipAnimator ` tire ses données d’animation d’un seul clip d’animation, `QBlendedClipAnimator` peut fusionner plusieurs clips. Les données d’animation sont obtenues en évaluant ce qu’on appelle un « blend tree ». Un « blend tree » est une structure arborescente hiérarchique dont les nœuds feuilles sont des nœuds de valeur encapsulant un clip d’animation (QAbstractAnimationClip) ; les nœuds internes représentent quant à eux des opérations de fusion agissant 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’arborescence des nœuds de fusion ne doit être modifiée que lorsque l’animateur n’est pas en cours d’exécution.

D'autres types de nœuds seront ajoutés au fil du temps.

Prenons par exemple l’arbre de mélange suivant :

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

Elle peut être créée et utilisée 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 effectuant des fondus dynamiques entre eux lors de l’exécution à l’aide d’un arbre de fondus, on ouvre la voie à une multitude d’animations possibles. Voici quelques exemples simples illustrant l’arbre de fondus ci-dessus, où alpha est le facteur additif et bêta le facteur de fondu par interpolation : on obtient ainsi un continuum 2D d’animations possibles :

(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 elles-mêmes être contrôlées par le framework d’animation.

Documentation sur les propriétés

blendTree : Qt3DAnimation::QAbstractClipBlendNode*

Cette propriété contient la racine de l'arborescence de mélange d'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 de notification :

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.