Qt Quick 3D - Beispiel für Morphing
Veranschaulicht, wie Morphing-Animationen in „ Qt Quick 3D “ gesteuert werden.

Dieses Beispiel zeigt, wie man Morphing-Animationen an einem Modell steuert, das aus einem externen Tool importiert wurde.
Erstellen eines Netzes
Das Mesh für das Modell wurde mit dem 3D-Modellierungsprogramm Blender erstellt. Zusätzlich zur Grundform enthält das Mesh drei Morph-Ziele (in Blender als „Shape Keys“ bezeichnet).

Es wurde aus Blender als glTF-Datei exportiert und mit Balsam importiert.
Steuerung der Morph-Ziele
Normalerweise wird das Morphing über eine Timeline-Animation oder eine Eigenschaftsanimation gesteuert. In diesem Beispiel verwenden wir stattdessen Schieberegler, um frei mit der Kombination verschiedener Gewichte experimentieren zu können:
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 “ ist ein einfacher Schieberegler, der einen Gleitkommawert liefert. Er stammt aus dem Effekte-Beispiel.)
Wir definieren für jedes der Ziele im Mesh einen „ MorphTarget “. Morph-Ziele sind die Objekte, an die wir die Steuerung binden, um das Morphing zu steuern. In der Regel werden sie animiert, aber in diesem Beispiel binden wir sie an die Schiebereglerwerte:
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
}Abschließend erstellen wir ein Modell und binden die Morph-Ziele an die Ziele im Mesh:
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
}
}Beachte, dass die Ziele anhand ihrer Position in der Liste zugeordnet werden: Die Namen spielen keine Rolle.
© 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.