summaryrefslogtreecommitdiffstats
path: root/src/animation
diff options
context:
space:
mode:
authorTopi Reinio <topi.reinio@qt.io>2018-02-07 13:21:09 +0100
committerTopi Reiniƶ <topi.reinio@qt.io>2018-02-09 12:07:25 +0000
commitc8964b8f1cf56718a189b0f57bad446cec30a8b8 (patch)
tree221f917586c8c50f862361cc7c41e0865499e4ef /src/animation
parentc8a48a9a28889598cb2a06fc8d5deb9b803509ca (diff)
Doc: Divide documentation into submodules
QDoc in Qt 5.11 will use Clang (libclang) to parse C++ documentation. In order to do that, Clang needs to have the include paths available when parsing source; qmake provides that information to QDoc but only when the documentation project is located under the correct module (source) path. By having dedicated doc projects for Qt 3D Core, Render, Input, etc. the number of documentation warnings is signicantly reduced. A top-level 'Qt 3D' project is still kept, and contains the landing page, overview, examples, and top-level 'C++ classes' and 'QML types' pages that list all types documented across all Qt 3D submodules. Change-Id: Id5936de36f31c2a8764a64e1e9d7ae0d10e8ab14 Reviewed-by: Martin Smith <martin.smith@qt.io>
Diffstat (limited to 'src/animation')
-rw-r--r--src/animation/animation.pro2
-rw-r--r--src/animation/doc/qt3danimation.qdocconf43
-rw-r--r--src/animation/doc/src/qt3danimation-module.qdoc230
3 files changed, 275 insertions, 0 deletions
diff --git a/src/animation/animation.pro b/src/animation/animation.pro
index b7d08416c..066985760 100644
--- a/src/animation/animation.pro
+++ b/src/animation/animation.pro
@@ -21,4 +21,6 @@ HEADERS += \
SOURCES += \
animationlogging.cpp
+QMAKE_DOCS = $$PWD/doc/qt3danimation.qdocconf
+
load(qt_module)
diff --git a/src/animation/doc/qt3danimation.qdocconf b/src/animation/doc/qt3danimation.qdocconf
new file mode 100644
index 000000000..74c185e7f
--- /dev/null
+++ b/src/animation/doc/qt3danimation.qdocconf
@@ -0,0 +1,43 @@
+include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
+include(../../doc/qt3d-config.qdocconf)
+
+project = Qt3DAnimation
+description = Qt 3D Animation Reference Documentation
+version = $QT_VERSION
+
+qhp.projects = Qt3DAnimation
+
+qhp.Qt3DAnimation.file = qt3danimation.qhp
+qhp.Qt3DAnimation.namespace = org.qt-project.qt3danimation.$QT_VERSION_TAG
+qhp.Qt3DAnimation.virtualFolder = qt3danimation
+qhp.Qt3DAnimation.indexTitle = Qt 3D Animation
+qhp.Qt3DAnimation.indexRoot =
+
+qhp.Qt3DAnimation.filterAttributes = qt3danimation $QT_VERSION qtrefdoc
+qhp.Qt3DAnimation.customFilters.Qt.name = Qt3DAnimation $QT_VERSION
+qhp.Qt3DAnimation.customFilters.Qt.filterAttributes = qt3danimation $QT_VERSION
+
+qhp.Qt3DAnimation.subprojects = classes qmltypes
+
+qhp.Qt3DAnimation.subprojects.classes.title = C++ Classes
+qhp.Qt3DAnimation.subprojects.classes.indexTitle = Qt 3D Animation C++ Classes
+qhp.Qt3DAnimation.subprojects.classes.selectors = class doc:headerfile
+qhp.Qt3DAnimation.subprojects.classes.sortPages = true
+
+qhp.Qt3DAnimation.subprojects.qmltypes.title = QML Types
+qhp.Qt3DAnimation.subprojects.qmltypes.indexTitle = Qt 3D Animation QML Types
+qhp.Qt3DAnimation.subprojects.qmltypes.selectors = qmltype
+qhp.Qt3DAnimation.subprojects.qmltypes.sortPages = true
+
+tagfile = qt3danimation.tags
+
+depends += qtcore qtgui qtqml qtquick qtdoc qmake
+
+# dependencies to other Qt 3D modules
+depends += qt3d qt3dcore qt3drender qt3dlogic \
+ qt3dinput qt3dextras qt3dscene2d
+
+sourcedirs += ..
+headerdirs += ..
+imagedirs += images
+exampledirs += snippets
diff --git a/src/animation/doc/src/qt3danimation-module.qdoc b/src/animation/doc/src/qt3danimation-module.qdoc
new file mode 100644
index 000000000..a056447e8
--- /dev/null
+++ b/src/animation/doc/src/qt3danimation-module.qdoc
@@ -0,0 +1,230 @@
+/****************************************************************************
+**
+** 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
+ \keyword Qt 3D Animation
+ \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.9
+ \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.9
+ \endcode
+
+ \section1 QML Types
+*/