Auf dieser Seite

Qt 3D Animation C++ Classes

Das Modul „ Qt 3D -Animation“ bietet eine Reihe vorgefertigter Elemente, die Ihnen den Einstieg in „ Qt 3D “ erleichtern. Mehr...

Dieses Modul ist seit Version 6.8 veraltet. Wir raten dringend davon ab, es in neuem Code zu verwenden.

Namensräume

Klassen

Qt3DAnimation::QAbstractAnimation

Eine abstrakte Basisklasse für Qt3D-Animationen

Qt3DAnimation::QAbstractAnimationClip

Die Basisklasse für Typen, die Daten für Keyframe-Animationen bereitstellen

Qt3DAnimation::QAbstractClipAnimator

Die Basisklasse für Typen, die Funktionen zur Wiedergabe von Animationen bereitstellen

Qt3DAnimation::QAbstractClipBlendNode

Die Basisklasse für Typen, die zum Erstellen von Animations-Blend-Bäumen verwendet werden

Qt3DAnimation::QAdditiveClipBlend

Führt eine additive Überblendung zweier Animationsclips basierend auf einem Additionsfaktor durch

Qt3DAnimation::QAnimationAspect

Stellt Keyframe-Animationsfunktionen bereit für Qt 3D

Qt3DAnimation::QAnimationCallback

Stellt ein Animations-Callback-Objekt dar

Qt3DAnimation::QAnimationClip

Legt Keyframe-Animationsdaten fest

Qt3DAnimation::QAnimationClipData

Klasse, die die Animationsdaten enthält

Qt3DAnimation::QAnimationClipLoader

Ermöglicht das Laden von Keyframe-Animationsdaten aus einer Datei

Qt3DAnimation::QAnimationController

Eine Controller-Klasse für Animationen

Qt3DAnimation::QAnimationGroup

Eine Klasse, die Animationen gruppiert

Qt3DAnimation::QBlendedClipAnimator

Komponente, die Funktionen zur Wiedergabe von Animationen in einer Baumstruktur aus Blend-Knoten bereitstellt

Qt3DAnimation::QCallbackMapping

Ermöglicht die Zuordnung der Kanäle innerhalb des Clips zu einem Aufruf eines Callback-Objekts

Qt3DAnimation::QChannel

Definiert einen Kanal für ein `QAnimationClipData`. Das Animationssystem interpoliert jede Kanalkomponente unabhängig, außer wenn der `QChannel` den Namen „Rotation“ trägt (Groß-/Kleinschreibung beachten); in diesem Fall verfügt er über vier `QChannelComponents` und für jede `QChannelComponent` die gleiche Anzahl an Keyframes. In diesem Fall erfolgt die Interpolation mittels SLERP

Qt3DAnimation::QChannelMapper

Ermöglicht die Zuordnung der Kanäle innerhalb des Clips zu Eigenschaften von Objekten in der Anwendung

Qt3DAnimation::QChannelMapping

Ermöglicht die Zuordnung der Kanäle innerhalb des Clips zu Eigenschaften von Objekten in der Anwendung

Qt3DAnimation::QClipAnimator

Komponente, die einfache Funktionen zur Wiedergabe von Animationen bereitstellt

Qt3DAnimation::QClipBlendValue

Klasse zum Einbinden eines Clips in einen Blend-Tree

Qt3DAnimation::QKeyFrame

Eine Basisklasse zur Verarbeitung von Keyframes

Qt3DAnimation::QKeyframeAnimation

Eine Klasse, die eine einfache Keyframe-Animation für ein `QTransform` implementiert

Qt3DAnimation::QLerpClipBlend

Führt eine lineare Interpolation zweier Animationsclips auf Basis eines Normalisierungsfaktors durch

Qt3DAnimation::QMorphTarget

Eine Klasse, die Morph-Ziele für Blend-Shape-Animationen bereitstellt

Qt3DAnimation::QMorphingAnimation

Eine Klasse, die Blend-Shape-Morphing-Animationen implementiert

Qt3DAnimation::QVertexBlendAnimation

Eine Klasse, die eine Vertex-Blend-Morphing-Animation implementiert

Ausführliche Beschreibung

Dieses Modul befindet sich noch in der Entwicklung, ist jedoch als Technologievorschau verfügbar. Das bedeutet, dass es instabil ist, sich wahrscheinlich noch ändern wird und nur als Service bereitgestellt wird.

#include <Qt3DAnimation>

Um eine Verknüpfung mit der entsprechenden C++-Bibliothek herzustellen, fügen Sie Folgendes zu Ihrer qmake-Projektdatei hinzu:

QT += 3danimation

Klassen, Typen und Funktionen werden unter dem Namespace „ Qt3DAnimation “ deklariert.

Übersicht

Das Animationsmodul „ Qt 3D “ bietet Unterstützung für die Festlegung und Verwendung von Animationen, die auf die Eigenschaften von Objekten in Ihrer Simulation angewendet werden können. Derzeit unterstützt dieses Modul Animationen auf Basis von Keyframes. Das bedeutet, dass Eigenschaften zu bestimmten Zeitpunkten mit Werten „verankert“ werden und bei der Wiedergabe die Eigenschaftswerte durch Interpolation zwischen den bekannten Werten innerhalb der Keyframes berechnet werden. Die gesamte Auswertung der Animationen innerhalb des „ Qt 3D “-Animationsmoduls findet im Threadpool „ Qt 3D “ statt. Dadurch laufen die Animationen flüssig und lassen sich auf einen hohen Durchsatz skalieren.

Animationsdaten

Keyframe-Animationsdaten können entweder programmgesteuert über die „ Qt 3D “-Animations-APIs wie z. B. `Qt3DAnimation::QKeyFrameData` erstellt werden oder aus DCC-Tools (Digital Content Creation) wie Blender, Maya oder 3D Studio Max stammen. „ Qt 3D “ stellt ein Beispiel-Exportscript für Animationsdaten aus Blender bereit. Das derzeit von der „ Qt 3D “-Animation verwendete Format ist ein einfaches, auf JSON basierendes Format. Dies ermöglicht sowohl Entwicklern als auch Grafikern eine einfache Arbeit mit Animationsdaten. Weitere, für die Laufzeitnutzung optimierte Formate werden später hinzugefügt.

Die Keyframe-Animationsdaten können mithilfe der Klasse „ Qt3DAnimation::QAnimationClipLoader “ aus einer Datei geladen werden. Um Animationsdaten programmgesteuert festzulegen, verwenden Sie die Klasse „ Qt3DAnimation::QAnimationClip “.

Standardmäßig werden die Keyframe-Daten mithilfe kubischer Bézier-Kurven festgelegt. Dadurch lassen sich mit einer geringen Anzahl von Keyframe-Datenpunkten flüssige Animationen erstellen. Weitere Interpolationstypen werden später hinzugefügt.

Wiedergabe von Animationen

Zusätzlich zu den Animationsdaten, die die Keyframes enthalten, bietet „ Qt 3D Animation“ auch APIs zum Abspielen der Animationen und zum Abbilden der resultierenden Eigenschaftswerte auf Eigenschaften von Objekten in Ihrer Simulation. Derzeit gibt es zwei Möglichkeiten, die Animationen abzuspielen:

Beide sind als Unterklassen von „ Qt3DCore::QComponent “ implementiert, was bedeutet, dass Objekte dieser Typen von „ Qt3DCore::QEntity “-Objekten aggregiert werden können, um Ihren simulierten Entitäten Animationsfunktionen hinzuzufügen.

Einfache Animationswiedergabe

Die Klasse „ Qt3DAnimation::QClipAnimator “ ermöglicht die Wiedergabe jeweils einer einzelnen „ Qt3DAnimation::QAbstractAnimationClip “-Instanz. Um einer Entität eine Animation hinzuzufügen, fügen Sie einfach eine Instanz der Klasse „ Qt3DAnimation::QClipAnimator “ zur Eigenschaft „ components “ Ihrer Entität hinzu.

Das Animationsmodul „ Qt 3D “ verfolgt einen etwas anderen Ansatz als „ QPropertyAnimation “ und „ AbstractAnimation “. Bei diesen Animations-Frameworks legt die Animation sowohl die Animationswerte als auch die Zielobjekte und -eigenschaften fest. Die Animationskomponenten in „ Qt 3D “ trennen diese beiden orthogonalen Konzepte voneinander. Beispielsweise verfügt die Komponente „ Qt3DAnimation::QClipAnimator “ über die Eigenschaft „ clip “ zur Angabe der Animationsdaten (Qt3DAnimation::QAnimationClip oder Qt3DAnimation::QAnimationClipLoader).

Dies ermöglicht die Berechnung der animierten Werte, doch es sind weitere Informationen erforderlich, um diese Werte den Eigenschaften von Objekten zuzuordnen. Dies geschieht mithilfe des „ Qt3DAnimation::QChannelMapper “, der eine Liste von „ Qt3DAnimation::QChannelMapping “-Objekten enthält. Ein „ Qt3DAnimation::QChannelMapping “ wird verwendet, um einen bestimmten Kanal aus einem Animationsclip einer benannten Eigenschaft eines Zielobjekts zuzuordnen. Durch diese Trennung von Animationsdaten und Eigenschaftszuordnungen kann dieselbe Animation auf viele Objekte angewendet werden, ohne dass mehrere Kopien der Animationsdaten oder Objekte erforderlich sind. Außerdem lassen sich Animationsdaten auf diese Weise problemlos auf andere Objekte umleiten.

Wiedergabe überblendeter Animationen

Die „ Qt3DAnimation::QBlendedClipAnimator “-Komponente ermöglicht es, über die Möglichkeiten von „ Qt3DAnimation::QClipAnimator “ hinauszugehen, indem mehrere Animationsclips miteinander gemischt werden, bevor die Eigenschaftsänderungen auf die Zieleigenschaften angewendet werden. Die Animator-Komponente benötigt nach wie vor einen Channel-Mapper, genau wie die Standardkomponente „ Qt3DAnimation::QClipAnimator “. Anstatt jedoch einen einzelnen Animationsclip anzugeben, muss die Eigenschaft „ blendTree “ so gesetzt werden, dass sie auf den Stammknoten eines Blend-Baums verweist.

Ein Blend-Tree ist eine Datenstruktur, die darstellt, wie Animationsclips in Abhängigkeit von den Eigenschaften der Knoten im Blend-Tree aggregiert oder miteinander überblendet werden. Derzeit werden folgende Blend-Tree-Knoten unterstützt:

Die Eingaben der Quell-Animationsclips werden als Blattknoten im Blend-Tree mithilfe von Instanzen der Klasse „ Qt3DAnimation::QClipBlendValue “ angegeben. Diese Animationsclips lassen sich auf vielfältige Weise kombinieren. Derzeit bietet das Qt3D-Animationsmodul lineare Interpolation (LERP) und additive Überblendungsoperationen. Im Laufe der Zeit werden weitere Blend-Knotentypen hinzugefügt. Dazu gehören voraussichtlich mindestens ein verallgemeinerter LERP-Knoten und ein baryzentrischer LERP-Knoten.

Betrachten wir als Beispiel den folgenden Blend-Tree:

Clip0----
        |
        Lerp Node----
        |           |
Clip1----           Additive Node
                    |
            Clip2----

Nehmen wir an, dass „ Clip0 “ einen Laufzyklus mit einer Dauer von 3 Sekunden darstellt und dass „ Clip1 “ einen Laufzyklus mit einer Dauer von 2 Sekunden darstellt. Beide sind Eingaben (und Abhängigkeiten) des Blend-Knotens „ Lerp “. Das Ergebnis der Auswertung des Knotens „ Lerp “ hängt von der Eigenschaft „ blendFactor “ des Knotens „ Lerp “ ab. Diese könnte beispielsweise an die Geschwindigkeit einer humanoiden Charakter-Entität gebunden sein. Mit zunehmender Geschwindigkeit des Charakters wird die Animation allmählich von der Laufanimation in Clip0 zur Laufanimation in Clip1 überblendet.

Nehmen wir außerdem an, dass „ Clip2 “ eine Variationsanimation darstellt, die hinzugefügt werden kann (z. B. mit den Armen winken oder den Kopf schütteln). Der Anteil dieses zusätzlichen Clips lässt sich über die Eigenschaft „ additiveFactor “ am Blend-Knoten „ Additive “ steuern.

Bei der Auswertung eines Blend-Baums wird die normierte Zeit (oder Phase) verwendet, sodass Clips unterschiedlicher Dauer problemlos miteinander überblendet werden können. Auch wenn die Animationsclips für das Gehen und Laufen beispielsweise unterschiedliche Längen haben, lassen sie sich gut interpolieren, solange sie vom Animator so erstellt wurden, dass die Fußauftritte in derselben Phase aufeinanderfolgen.

Daraus folgt, dass die Dauer des überblendeten Clips tatsächlich eine Funktion der Überblendungsfaktoren der Knoten im Baum ist. Betrachtet man nur den Knoten „ Lerp “ im obigen Beispiel: Wenn der Überblendungsfaktor des Knotens „ Lerp “ 0 ist, wird nur die „Walk“-Animation in Clip0 verwendet, was zu einer Dauer von 3 Sekunden führt. Bei einem Überblendungsfaktor von 1 beträgt die resultierende Dauer 2 Sekunden. Bei Zwischenwerten des Überblendungsfaktors wird die Dauer linear zwischen 3 und 2 Sekunden interpoliert.

Durch die Definition eigener Überblendbäume haben Sie die vollständige Kontrolle darüber, wie Ihre Sammlung von Eingabe-Animationsclips kombiniert wird. Der Überblendbaum lässt sich über die Eigenschaften der Überblendknoten konfigurieren. Beachten Sie außerdem, dass es sich bei den Eigenschaften der Überblendknoten selbst um Standard-Eigenschaften handelt, die wiederum, falls gewünscht, durch andere Animationen gesteuert werden können.

Referenz

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