Qt Quick 3D - Exemple de morphing
Démontre comment contrôler les animations de morphing dans Qt Quick 3D.

Cet exemple montre comment contrôler les animations de morphing sur un modèle qui a été importé à partir d'un outil externe.
Création d'un maillage
Le maillage du modèle a été créé à l'aide de l'outil de modélisation 3D Blender. En plus de la forme de base, le maillage contient trois cibles de morphing (appelées clés de forme dans Blender).

Il a été exporté de Blender sous la forme d'un fichier glTF, puis importé à l'aide de balsam.
Contrôler les cibles de morphing
Normalement, le morphing est contrôlé par une animation de ligne de temps ou une animation de propriété. Dans cet exemple, nous utilisons plutôt des curseurs, pour permettre d'expérimenter librement la combinaison de différents poids :
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 est un simple curseur qui fournit une valeur à virgule flottante. Il est emprunté à l'exemple des effets).
Nous définissons une MorphTarget pour chacune des cibles du maillage. Les cibles de morphing sont les objets auxquels nous nous lions pour contrôler le morphing. Typiquement, ils seront animés, mais dans cet exemple, nous nous lions aux valeurs du curseur :
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 }
Enfin, nous créons un modèle et lions les cibles de morphing aux cibles du maillage :
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 } }
Notez que les cibles sont associées à leur position dans la liste : les noms ne sont pas significatifs.
© 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.