Qt Quick 3D - 变形示例
展示如何在 Qt Quick 3D 中控制变形动画。
此示例演示了如何控制从外部工具导入的模型上的变形动画。
创建网格
模型使用的网格是通过 Blender 3D 建模工具创建的。除了基本形状外,网格还包含三个变形目标(在 Blender 中称为 形状键)。
它作为 glTF 文件从 Blender 导出,并使用 balsam 导入。
控制变形目标
通常,变形是通过 时间轴动画 或属性动画来控制的。在此示例中,我们使用滑块,以便可以自由地组合不同的权重进行实验
Label { text: "Mouth:"; } RealSlider { id: mouthSlider from: 0.0 to: 1.0 } Label { text: "Ears and eyebrows:" } RealSlider { id: earSlider from: 0.0 to: 1.0 } Label { text: "Cubify:" } RealSlider { id: cubeSlider from: 0.0 to: 1.0 }
(RealSlider
是一个简单的滑块,提供浮点值。它来自效果示例。
我们对网格中的每个目标定义一个 MorphTarget。变形目标是我们将要绑定以控制变形的对象。通常,它们会被动画化,但在本例中我们将它们绑定到滑块值
MorphTarget { id: morphtarget0 weight: mouthSlider.value attributes: MorphTarget.Position | MorphTarget.Normal } MorphTarget { id: morphtarget1 weight: earSlider.value attributes: MorphTarget.Position | MorphTarget.Normal } MorphTarget { id: morphtarget2 weight: cubeSlider.value attributes: MorphTarget.Position | MorphTarget.Normal }
最后,我们创建一个模型并将变形目标绑定到网格中的目标
Model { source: "suzanne.mesh" morphTargets: [ morphtarget0, morphtarget1, morphtarget2 ] materials: PrincipledMaterial { baseColor: "#41cd52" roughness: 0.1 } SequentialAnimation on eulerRotation.y { NumberAnimation { from: -45; to: 45; duration: 10000 } NumberAnimation { from: 45; to: -45; duration: 10000 } loops: Animation.Infinite } }
请注意,目标通过其在列表中的位置进行匹配:名称并不重要。
文件
© 2024 The Qt Company Ltd. 本文档中包含的贡献的版权属于各自的拥有者。本提供的文档是在 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 下的许可下发表的。Qt 和相关标志是 The Qt Company Ltd. 在芬兰和其他国家的商标。所有其他商标均为其各自所有者的财产。