QBlendedClipAnimator 类

class Qt3DAnimation::QBlendedClipAnimator

QBlendedClipAnimator 提供了播放混合节点树动画能力的组件。更多...

头文件 #include <QBlendedClipAnimator>
CMakefind_package(Qt6 REQUIRED COMPONENTS 3danimation)
target_link_libraries(mytarget PRIVATE Qt6::3danimation)
qmakeQT += 3danimation
由以下类实例化 BlendedClipAnimator
继承 Qt3DAnimation::QAbstractClipAnimator

属性

  • blendTree : Qt3DAnimation::QAbstractClipBlendNode*

公共函数

Qt3DAnimation::QAbstractClipBlendNode *blendTree() const

公共槽

voidsetBlendTree(Qt3DAnimation::QAbstractClipBlendNode *\n blendTree\n )

信号

voidblendTreeChanged(Qt3DAnimation::QAbstractClipBlendNode *\n blendTree\n )

详细描述

一个 QBlendedClipAnimator 的实例可以由一个 QEntity 聚合,以添加播放动画片段的能力,并将计算出的动画值应用到 QObjects 的属性上。

而一个 QClipAnimator 从单个动画片段获取其动画数据,QBlendedClipAnimator 可以混合多个片段。通过评估所谓的 混合树 来获得动画数据。混合树是一个层叠的树结构,其中叶子节点是封装动画片段(QAbstractAnimationClip)的值节点;而内部节点代表由它们的操作属性指向的节点的混合操作。

要将混合树与 QBlendedClipAnimator 关联,请将动画器的 blendTree 属性设置为指向您的混合树的根节点

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

混合树可以从以下节点类型构建

注意:应仅在动画器不运行时编辑混合节点树。

随着时间推移,将添加更多的节点类型。

以下是一个示例混合树

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是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

更复杂的混合树为您提供了更多组合动画剪辑的灵活性。请注意,用于控制混合树(如上面的alpha和beta)的值是混合节点上的简单属性。这意味着,这些属性本身也可以由动画框架控制。

属性文档

blendTree : Qt3DAnimation::QAbstractClipBlendNode*

此属性保存动画混合树的根,在被动画器插值之前将被评估。

访问函数

Qt3DAnimation::QAbstractClipBlendNode *blendTree() const
voidsetBlendTree(Qt3DAnimation::QAbstractClipBlendNode *blendTree)

通知信号

voidblendTreeChanged(Qt3DAnimation::QAbstractClipBlendNode *blendTree)

© 2024 Qt公司 Ltd。包含在本处的文档贡献是各自所有者的版权。本提供的文档是根据自由软件基金会发布的GNU自由文档许可(FDL)1.3版本许可的。Qt以及相应的标志是芬兰及/或全球其他地区的Qt公司有限公司的商标。所有其他商标均为各自所有者的财产。