summaryrefslogtreecommitdiffstats
path: root/src/doc/src/qt3danimation-module.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/doc/src/qt3danimation-module.qdoc')
-rw-r--r--src/doc/src/qt3danimation-module.qdoc228
1 files changed, 228 insertions, 0 deletions
diff --git a/src/doc/src/qt3danimation-module.qdoc b/src/doc/src/qt3danimation-module.qdoc
new file mode 100644
index 000000000..0601a8973
--- /dev/null
+++ b/src/doc/src/qt3danimation-module.qdoc
@@ -0,0 +1,228 @@
+/****************************************************************************
+**
+** Copyright (C) 2017 The Qt Company Ltd.
+** Copyright (C) 2017 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \module Qt3DAnimation
+ \title Qt 3D Animation C++ Classes
+
+ \brief The Qt 3D Animation modules provides a set of prebuilt elements to help
+ you get started with Qt 3D.
+
+ This module is still in tech preview. This means it is unstable, likely to
+ change and provided as a convenience only.
+
+ \ingroup modules
+ \ingroup qt3d-modules
+ \qtvariable 3danimation
+
+ \code
+ #include <Qt3DAnimation>
+ \endcode
+
+ To link against the corresponding C++ library, add the following to your qmake project file:
+
+ \badcode
+ QT += 3danimation
+ \endcode
+
+ Classes, types, and functions are declared under the \l [Qt3DAnimation]{Qt3DAnimation} namespace.
+
+ \section1 Overview
+
+ The Qt 3D Animation module adds support for specifying and using animations
+ that can be applied to the properties of objects in your simulation.
+ Initially this module supports key frame based animations. That is,
+ properties have values 'keyed' at certain times and when played back the
+ property values are calculated by interpolating between the known values
+ within the key frames. All of the animation evaluation within the Qt 3D
+ Animation module takes place on the Qt 3D threadpool. This allows the
+ animations to run smoothly and to scale up to high throughput.
+
+ \section2 Animation Data
+
+ Key frame animation data can either be created programmatically via the Qt
+ 3D Animation APIs such as Qt3DAnimation::QKeyFrameData or it can come from
+ digital content creation (DCC) tools such as Blender, Maya or 3D Studio
+ Max. Qt 3D provides an example export script for animation data for
+ Blender. The format consumed by Qt 3D Animation at present is a simple JSON
+ based format. This allows both developers and artists to easily work with
+ animation data. More formats optimised for runtime consumption will be
+ added later.
+
+ The key frame animation data can be loaded from file using the
+ Qt3DAnimation::QAnimationClipLoader class. To specify animation data
+ programmatically use the Qt3DAnimation::QAnimationClip class.
+
+ By default, the key frame data is specified using cubic bezier curves. This
+ allows smooth animations to be created from a small number of key frame
+ data points. Other interpolation types will be added later.
+
+ \section2 Playing Animations
+
+ In addition to the animation data containing the key frames, Qt 3D
+ Animation also provides APIs for playing the animations and mapping the
+ resulting property values onto properties of objects in your simulation.
+ There are currently two ways of playing the animations:
+
+ \list
+ \li Qt3DAnimation::QClipAnimator
+ \li Qt3DAnimation::QBlendedClipAnimator
+ \endlist
+
+ Both of these are implemented as subclasses of Qt3DCore::QComponent meaning
+ that objects of these types can be aggregated by Qt3DCore::QEntity objects
+ to add animation capabilities to your simulated entities.
+
+ \section2 Simple Animation Playback
+
+ The Qt3DAnimation::QClipAnimator class allows the playback of a single
+ Qt3DAnimation::QAbstractAnimationClip at a time. To add an animation to an
+ entity, simply add an instance of the Qt3DAnimation::QClipAnimator class to
+ your entity's \c components property.
+
+ The Qt 3D Animation module takes a slightly different approach to
+ QPropertyAnimation and AbstractAnimation. With those animation frameworks,
+ the animation specifies both the animation values \e {and} the target
+ objects and properties. The animation components in Qt 3D separate these
+ two orthogonal concepts. For example, the Qt3DAnimation::QClipAnimator
+ component has a \c clip property for specifying the animation data
+ (Qt3DAnimation::QAnimationClip or Qt3DAnimation::QAnimationClipLoader).
+
+ This allows calculation of the animated values, but more information is
+ needed in order to map these values onto properties of objects. This is
+ accomplished with the a Qt3DAnimation::QChannelMapper which contains a list
+ of Qt3DAnimation::QChannelMapping objects. A Qt3DAnimation::QChannelMapping
+ is used to map a specific channel from an animation clip onto a named
+ property of a target object. By separating the animation data and property
+ mappings like this, the same animation can be applied to many objects
+ without needing to have multiple copies of the animation data or objects.
+ It also allows animation data to easily be retargeted to other objects.
+
+ \section2 Blended Animation Playback
+
+ The Qt3DAnimation::QBlendedClipAnimator component allows to go beyond what
+ is possible with Qt3DAnimation::QClipAnimator by blending several animation
+ clips together before applying the property changes to the target
+ properties. The animator component still takes a channel mapper just like
+ the standard Qt3DAnimation::QClipAnimator component. However, instead of
+ specifying a single animation clip, it is necessary to set the \c blendTree
+ property to point to the root node of a \e {blend tree}.
+
+ A blend tree is a data structure representing how animation clips get
+ aggregated or blended together as the function of properties on the blend
+ tree nodes. The currently supported set of blend tree nodes are:
+
+ \list
+ \li Qt3DAnimation::QClipBlendValue
+ \li Qt3DAnimation::QLerpClipBlend
+ \li Qt3DAnimation::QAdditiveClipBlend
+ \endlist
+
+ The source animation clip inputs are specified as leaf nodes in the blend
+ tree using instances of the Qt3DAnimation::QClipBlendValue class. These
+ animation clips can be combined in a large number of ways. For now the Qt3D
+ Animation module provides linear interpolation (LERP) and additive blend
+ operations. More blend node types will be added over time. These are
+ expected to include at least a generalised LERP node and a barycentric LERP
+ node.
+
+ As an example consider the following blend tree:
+
+ \badcode
+ Clip0----
+ |
+ Lerp Node----
+ | |
+ Clip1---- Additive Node
+ |
+ Clip2----
+ \endcode
+
+ Let's assume that \c Clip0 represents a walk animation cycle with a
+ duration of 3 seconds and that \c Clip1 is a run animation cycle with a
+ duration of 2 seconds. These are both inputs (and dependencies) of the \c
+ Lerp blend node. The result of evaluating the \c Lerp node depends upon the
+ \c blendFactor property of the \c Lerp node. This could be bound to the
+ speed of a humanoid character entity for example. As the speed of the
+ character increases the animation gradually cross-fades from the walk
+ animation in \c Clip0 to the run animation in \c Clip1.
+
+ Furthermore, let's assume that \c Clip2 represents some variation animation
+ that can be added on (waving arms or shaking head for e.g.). The amount of
+ this additive clip that is added can be controlled by the \c additiveFactor
+ property on the \c Additive blend node.
+
+ When evaluating a blend tree, normalized time (or phase) is used so that
+ clips of different durations can be blended together without problems. For
+ example, even though the walk and run animation clips are of different
+ lengths, as long as they are created by the animator such that the
+ foot-falls line up at the same phase these can be nicely interpolated.
+
+ The implication of this is that the duration of the blended clip is
+ actually a function of the blend factors of the nodes in the tree.
+ Considering only the \c Lerp node in the above example, when the blend
+ factor of the \c Lerp node is 0, only the walk animation in Clip0 is used
+ resulting in a duration of 3 seconds. With a blend factor of 1 the
+ resulting duration will be 2 seconds. For intermediate blend factors, the
+ duration will be linearly interpolated between 3 and 2 seconds.
+
+ By definining your own blend trees, you have complete control over how to
+ combine your collection of input animation clips. The blend tree can be
+ configured by the properties on the blend nodes. Note also that the
+ properties on the blend nodes themselves are just standard properties, so
+ these could in turn be driven by other animations if desired.
+
+ \section1 Reference
+ \list
+ \li \l {Qt 3D Animation C++ Classes}
+ \li \l {Qt 3D Examples}
+ \endlist
+ */
+
+/*!
+ \namespace Qt3DAnimation
+ \inmodule Qt3DAnimation
+ \ingroup qt3d-namespaces
+
+ \brief Contains classes from the Qt3DAnimation module.
+*/
+
+/*!
+ \qmlmodule Qt3D.Animation 2.0
+ \title Qt 3D Qt3DAnimation QML Types
+ \ingroup qmlmodules
+ \ingroup qt3d-qmlmodules
+
+ \brief Provides Qt 3D QML types for the animation module.
+
+ To import and use the module's QML types, use the following statement:
+
+ \badcode
+ import Qt3D.Animation 2.0
+ \endcode
+*/