Sur cette page

Qt Quick 3D - Exemple de morphing

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

Modèle de tête en 3D avec des curseurs de morphing pour la bouche, les oreilles et la fonction « Cubify »

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).

Interface de Blender avec un modèle de tête de singe et des commandes de clés de forme

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.

Exemple de projet sur code.qt.io

© 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.