QBlendedClipAnimator 类
class Qt3DAnimation::QBlendedClipAnimatorQBlendedClipAnimator 提供了播放混合节点树动画能力的组件。更多...
头文件 | #include <QBlendedClipAnimator> |
CMake | find_package(Qt6 REQUIRED COMPONENTS 3danimation) target_link_libraries(mytarget PRIVATE Qt6::3danimation) |
qmake | QT += 3danimation |
由以下类实例化 | BlendedClipAnimator |
继承 | Qt3DAnimation::QAbstractClipAnimator |
属性
- blendTree : Qt3DAnimation::QAbstractClipBlendNode*
公共函数
Qt3DAnimation::QAbstractClipBlendNode * | blendTree() const |
公共槽
void | setBlendTree(Qt3DAnimation::QAbstractClipBlendNode *\n blendTree\n ) |
信号
void | blendTreeChanged(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 |
void | setBlendTree(Qt3DAnimation::QAbstractClipBlendNode *blendTree) |
通知信号
void | blendTreeChanged(Qt3DAnimation::QAbstractClipBlendNode *blendTree) |
© 2024 Qt公司 Ltd。包含在本处的文档贡献是各自所有者的版权。本提供的文档是根据自由软件基金会发布的GNU自由文档许可(FDL)1.3版本许可的。Qt以及相应的标志是芬兰及/或全球其他地区的Qt公司有限公司的商标。所有其他商标均为各自所有者的财产。