summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2018-01-25 11:10:56 +0100
committerPaul Lemire <paul.lemire@kdab.com>2018-01-25 15:55:19 +0000
commite1b0e10340cf0a9c233774647cf316a7519a2093 (patch)
treebfe3af7babdd6a10314b02bb273a1b9ff30239ca
parentf6a9174e5efeda68151f2d992fcd916fb2dd2c99 (diff)
QTransform: add fromAxes and rotateFromAxes helper
Make it a lot easier to create a QQuaternion or a Rotation matrix for 3 axes. This will greatly simplify implementing custom camera nodes from Transform and CameraLens. Change-Id: Ifed9e3c7442d451ffa4346223afecc0eafff0ed5 Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Mike Krus <mike.krus@kdab.com>
-rw-r--r--src/core/transforms/qtransform.cpp21
-rw-r--r--src/core/transforms/qtransform.h2
2 files changed, 23 insertions, 0 deletions
diff --git a/src/core/transforms/qtransform.cpp b/src/core/transforms/qtransform.cpp
index a551d83d8..82f665296 100644
--- a/src/core/transforms/qtransform.cpp
+++ b/src/core/transforms/qtransform.cpp
@@ -514,6 +514,15 @@ QQuaternion QTransform::fromAxesAndAngles(const QVector3D &axis1, float angle1,
}
/*!
+ Creates a QQuaterniom definining a rotation from the axes \a xAxis, \a yAxis and \a zAxis.
+ \since 5.11
+ */
+QQuaternion QTransform::fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis)
+{
+ return QQuaternion::fromAxes(xAxis, yAxis, zAxis);
+}
+
+/*!
Creates a QQuaternion from \a eulerAngles.
Returns the resulting QQuaternion.
*/
@@ -544,6 +553,18 @@ QMatrix4x4 QTransform::rotateAround(const QVector3D &point, float angle, const Q
return m;
}
+/*!
+ Returns a rotation matrix defined from the axes \a xAxis, \a yAxis, \a zAxis.
+ \since 5.11
+ */
+QMatrix4x4 QTransform::rotateFromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis)
+{
+ return QMatrix4x4(xAxis.x(), yAxis.x(), zAxis.x(), 0.0f,
+ xAxis.y(), yAxis.y(), zAxis.y(), 0.0f,
+ xAxis.z(), yAxis.z(), zAxis.z(), 0.0f,
+ 0.0f, 0.0f, 0.0f, 1.0f);
+}
+
QNodeCreatedChangeBasePtr QTransform::createNodeCreationChange() const
{
auto creationChange = QNodeCreatedChangePtr<QTransformData>::create(this);
diff --git a/src/core/transforms/qtransform.h b/src/core/transforms/qtransform.h
index 7e803f245..0a88cb49c 100644
--- a/src/core/transforms/qtransform.h
+++ b/src/core/transforms/qtransform.h
@@ -79,11 +79,13 @@ public:
Q_INVOKABLE static QQuaternion fromAxesAndAngles(const QVector3D &axis1, float angle1,
const QVector3D &axis2, float angle2,
const QVector3D &axis3, float angle3);
+ Q_INVOKABLE static QQuaternion fromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis);
Q_INVOKABLE static QQuaternion fromEulerAngles(const QVector3D &eulerAngles);
Q_INVOKABLE static QQuaternion fromEulerAngles(float pitch, float yaw, float roll);
Q_INVOKABLE static QMatrix4x4 rotateAround(const QVector3D &point, float angle, const QVector3D &axis);
+ Q_INVOKABLE static QMatrix4x4 rotateFromAxes(const QVector3D &xAxis, const QVector3D &yAxis, const QVector3D &zAxis);
QMatrix4x4 matrix() const;