Sur cette page

Qt Quick 3D - Exemple de morphing

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

Modèle de tête en 3D avec curseurs de morphing pour la bouche, les oreilles et les cubes

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

Interface Blender avec modèle de tête de singe et contrôles des touches de forme

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.

Exemple de projet @ 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.