Qt 3D Animation C++ Classes
Die Qt 3D Animationsmodule bieten eine Reihe von vorgefertigten Elementen, die Ihnen den Einstieg in Qt 3D erleichtern. Mehr...
Dieses Modul ist seit 6.8 veraltet. Wir raten dringend davon ab, es in neuem Code zu verwenden.
Namespaces
Enthält Klassen aus dem Modul Qt3DAnimation |
Klassen
Eine abstrakte Basisklasse für Qt3D-Animationen | |
Die Basisklasse für Typen, die Keyframe-Animationsdaten bereitstellen | |
Die Basisklasse für Typen, die Animationswiedergabemöglichkeiten bieten | |
Die Basisklasse für Typen, die zur Konstruktion von Animationsüberblendungsbäumen verwendet werden | |
Führt eine additive Überblendung von zwei Animationsclips basierend auf einem additiven Faktor durch | |
Bietet Key-Frame-Animationsfunktionen für Qt 3D | |
Stellt ein Animations-Callback-Objekt dar | |
Spezifiziert Keyframe-Animationsdaten | |
Klasse, die die Animationsdaten enthält | |
Ermöglicht das Laden von Keyframe-Animationsdaten aus einer Datei | |
Eine Controller-Klasse für Animationen | |
Eine Klasse, die Animationen gruppiert | |
Komponente, die die Wiedergabe von Animationen in einem Baum von Überblendknoten ermöglicht | |
Ermöglicht die Zuordnung der Kanäle innerhalb des Clips zu einem Aufruf eines Callback-Objekts | |
Definiert einen Kanal für ein QAnimationClipData. Das Animationssystem interpoliert jede Kanalkomponente unabhängig, es sei denn, der QChannel heißt "Rotation" (Groß- und Kleinschreibung wird beachtet), er hat vier QChannelComponents und die gleiche Anzahl von Keyframes für jede QChannelComponent. In diesem Fall wird die Interpolation mit SLERP durchgeführt. | |
Ermöglicht die Zuordnung der Kanäle innerhalb des Clips zu den Eigenschaften von Objekten in der Anwendung | |
Ermöglicht die Zuordnung der Kanäle innerhalb des Clips zu den Eigenschaften von Objekten in der Anwendung | |
Komponente, die eine einfache Wiedergabe von Animationen ermöglicht | |
Klasse zum Einfügen eines Clips in einen Blend Tree | |
Eine Basisklasse für die Handhabung von Keyframes | |
Eine Klasse, die eine einfache Keyframe-Animation für eine QTransform implementiert | |
Führt eine lineare Interpolation zweier Animationsclips basierend auf einem normalisierten Faktor durch | |
Eine Klasse, die Morph-Ziele für Blend-Shape-Animation bereitstellt | |
Eine Klasse, die Blend-Shape-Morphing-Animation implementiert | |
Eine Klasse, die eine Vertex-Blend-Morphing-Animation implementiert |
Detaillierte Beschreibung
Dieses Modul befindet sich noch in der Entwicklung, ist aber als Technologievorschau verfügbar. Das bedeutet, dass es instabil ist, sich wahrscheinlich noch ändern wird und nur der Einfachheit halber zur Verfügung gestellt wird.
#include <Qt3DAnimation>
Um gegen die entsprechende C++ Bibliothek zu linken, fügen Sie das Folgende zu Ihrer qmake Projektdatei hinzu:
QT += 3danimation
Klassen, Typen und Funktionen werden im Namespace Qt3DAnimation deklariert.
Überblick
Das Modul Qt 3D Animation bietet Unterstützung für die Spezifikation und Verwendung von Animationen, die auf die Eigenschaften von Objekten in Ihrer Simulation angewendet werden können. Anfänglich unterstützt dieses Modul Keyframe-basierte Animationen. Das bedeutet, dass die Werte der Eigenschaften zu bestimmten Zeitpunkten "verschlüsselt" werden und bei der Wiedergabe die Werte der Eigenschaften durch Interpolation zwischen den bekannten Werten innerhalb der Schlüsselbilder berechnet werden. Die gesamte Animationsauswertung innerhalb des Moduls Qt 3D Animation findet im Threadpool Qt 3D statt. Dies ermöglicht einen reibungslosen Ablauf der Animationen und eine Skalierung auf einen hohen Durchsatz.
Animationsdaten
Keyframe-Animationsdaten können entweder programmatisch über die Qt 3D Animation-APIs wie Qt3DAnimation::QKeyFrameData erstellt werden oder sie können von Digital Content Creation (DCC)-Tools wie Blender, Maya oder 3D Studio Max stammen. Qt 3D bietet ein Beispiel-Exportskript für Animationsdaten für Blender. Das Format, das von Qt 3D Animation derzeit verwendet wird, ist ein einfaches JSON-basiertes Format. Dies ermöglicht es sowohl Entwicklern als auch Künstlern, einfach mit Animationsdaten zu arbeiten. Weitere Formate, die für den Laufzeitverbrauch optimiert sind, werden später hinzugefügt.
Die Keyframe-Animationsdaten können mit der Klasse Qt3DAnimation::QAnimationClipLoader aus einer Datei geladen werden. Um Animationsdaten programmatisch festzulegen, verwenden Sie die Klasse Qt3DAnimation::QAnimationClip.
Standardmäßig werden die Schlüsselbilddaten mit kubischen Bézierkurven angegeben. Dadurch können aus einer kleinen Anzahl von Keyframe-Datenpunkten flüssige Animationen erstellt werden. Andere Interpolationstypen werden später hinzugefügt.
Abspielen von Animationen
Zusätzlich zu den Animationsdaten, die die Schlüsselbilder enthalten, bietet Qt 3D Animation auch APIs zum Abspielen der Animationen und zum Zuordnen der resultierenden Eigenschaftswerte zu den Eigenschaften der Objekte 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 durch Qt3DCore::QEntity Objekte aggregiert werden können, um Ihren simulierten Entitäten Animationsfähigkeiten hinzuzufügen.
Einfache Animationswiedergabe
Die Klasse Qt3DAnimation::QClipAnimator ermöglicht die Wiedergabe einer einzelnen Qt3DAnimation::QAbstractAnimationClip zu einer Zeit. Um eine Animation zu einer Entität hinzuzufügen, fügen Sie einfach eine Instanz der Klasse Qt3DAnimation::QClipAnimator zu der components
Eigenschaft Ihrer Entität hinzu.
Das Modul Qt 3D Animation verfolgt einen etwas anderen Ansatz als QPropertyAnimation und AbstractAnimation. Bei diesen Animations-Frameworks gibt die Animation sowohl die Animationswerte als auch die Zielobjekte und -eigenschaften an. Die Animationskomponenten in Qt 3D trennen diese beiden orthogonalen Konzepte. Zum Beispiel hat die Komponente Qt3DAnimation::QClipAnimator eine Eigenschaft clip
zur Angabe der Animationsdaten (Qt3DAnimation::QAnimationClip oder Qt3DAnimation::QAnimationClipLoader).
Dies ermöglicht die Berechnung der animierten Werte, aber es werden weitere Informationen benötigt, um diese Werte auf Eigenschaften von Objekten abzubilden. Dies wird mit der Eigenschaft Qt3DAnimation::QChannelMapper erreicht, die eine Liste von Qt3DAnimation::QChannelMapping Objekten enthält. Ein Qt3DAnimation::QChannelMapping wird verwendet, um einen bestimmten Kanal aus einem Animationsclip auf eine benannte Eigenschaft eines Zielobjekts abzubilden. Durch diese Trennung von Animationsdaten und Eigenschaftszuordnungen kann ein und dieselbe Animation auf viele Objekte angewendet werden, ohne dass mehrere Kopien der Animationsdaten oder Objekte erforderlich sind. Außerdem können die Animationsdaten auf diese Weise leicht auf andere Objekte übertragen werden.
Überlagerte Animationswiedergabe
Die Komponente Qt3DAnimation::QBlendedClipAnimator ermöglicht es, über das hinauszugehen, was mit Qt3DAnimation::QClipAnimator möglich ist, indem mehrere Animationsclips zusammengemischt werden, bevor die Eigenschaftsänderungen auf die Zieleigenschaften angewendet werden. Die Animator-Komponente benötigt genau wie die Standardkomponente Qt3DAnimation::QClipAnimator einen Kanal-Mapper. Anstatt jedoch einen einzelnen Animationsclip anzugeben, muss die Eigenschaft blendTree
so eingestellt werden, dass sie auf den Wurzelknoten eines Mischbaums verweist.
Ein Überblendungsbaum ist eine Datenstruktur, die darstellt, wie Animationsclips in Abhängigkeit von den Eigenschaften der Überblendungsbaumknoten zusammengefügt oder überblendet werden. Die derzeit unterstützten Mischbaumknoten sind:
Die Eingaben der Quell-Animationsclips werden als Blattknoten im Überblendungsbaum mit Instanzen der Klasse Qt3DAnimation::QClipBlendValue angegeben. Diese Animationsclips können auf eine Vielzahl von Arten kombiniert werden. Im Moment bietet das Qt3D Animationsmodul lineare Interpolation (LERP) und additive Mischoperationen. Im Laufe der Zeit werden weitere Überblendknoten-Typen hinzugefügt. Es wird erwartet, dass diese mindestens einen verallgemeinerten LERP-Knoten und einen baryzentrischen LERP-Knoten umfassen.
Betrachten wir als Beispiel den folgenden Mischungsbaum:
Clip0---- | Lerp Node---- | | Clip1---- Additive Node | Clip2----
Nehmen wir an, dass Clip0
einen Geh-Animationszyklus mit einer Dauer von 3 Sekunden darstellt und dass Clip1
ein Lauf-Animationszyklus mit einer Dauer von 2 Sekunden ist. Dies sind beides Eingaben (und Abhängigkeiten) des Überblendungsknotens Lerp
. Das Ergebnis der Auswertung des Knotens Lerp
hängt von der Eigenschaft blendFactor
des Knotens Lerp
ab. Diese könnte zum Beispiel an die Geschwindigkeit einer humanoiden Figur gebunden sein. Wenn die Geschwindigkeit der Figur zunimmt, wird die Animation allmählich von der Geh-Animation in Clip0
zur Lauf-Animation in Clip1
überblendet.
Nehmen wir außerdem an, dass Clip2
eine Variationsanimation darstellt, die hinzugefügt werden kann (z. B. Winken mit den Armen oder Kopfschütteln). Die Menge des hinzugefügten Clips kann über die Eigenschaft additiveFactor
des Überblendungsknotens Additive
gesteuert werden.
Bei der Auswertung eines Überblendungsbaums wird die normalisierte Zeit (oder Phase) verwendet, so dass Clips mit unterschiedlicher Dauer problemlos überblendet werden können. Obwohl die Clips der Geh- und Laufanimation unterschiedlich lang sind, können sie beispielsweise problemlos interpoliert werden, solange sie vom Animator so erstellt werden, dass die Fußstöße in derselben Phase liegen.
Daraus folgt, dass die Dauer des überblendeten Clips eine Funktion der Überblendfaktoren der Knoten im Baum ist. Betrachtet man nur den Knoten Lerp
im obigen Beispiel, so wird bei einem Überblendungsfaktor von 0 für den Knoten Lerp
nur die Laufanimation in Clip0 verwendet, was zu einer Dauer von 3 Sekunden führt. Bei einem Überblendfaktor von 1 beträgt die resultierende Dauer 2 Sekunden. Bei dazwischen liegenden Überblendfaktoren wird die Dauer linear zwischen 3 und 2 Sekunden interpoliert.
Indem Sie Ihre eigenen Überblendungsbäume definieren, haben Sie die vollständige Kontrolle darüber, wie Sie Ihre Sammlung von Eingangsanimationsclips kombinieren. Der Überblendungsbaum kann über die Eigenschaften der Überblendungsknoten konfiguriert werden. Beachten Sie auch, dass es sich bei den Eigenschaften der Überblendungsknoten selbst nur um Standardeigenschaften handelt, die wiederum von anderen Animationen gesteuert werden können, falls gewünscht.
Referenz
© 2025 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.