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

Cet exemple montre comment contrôler une animation de morphing sur un modèle importé depuis 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. Outre la forme de base, le maillage contient trois cibles de morphing (appelées « shape keys » dans Blender).

Il a été exporté depuis Blender au format glTF, puis importé à l'aide de Balsam.
Contrôle des cibles de morphing
Normalement, le morphing est contrôlé par une animation sur la timeline ou une animation de propriété. Dans cet exemple, nous utilisons plutôt des curseurs, afin de pouvoir expérimenter librement en combinant différentes pondérations :
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 un « MorphTarget » pour chacune des cibles du maillage. Les cibles de morphing sont les objets auxquels nous nous lions pour contrôler le morphing. En général, elles sont animées, mais dans cet exemple, nous les lions aux valeurs des curseurs :
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 en fonction de leur position dans la liste : les noms n’ont pas d’importance.
© 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.