diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2018-01-25 11:10:56 +0100 |
---|---|---|
committer | Paul Lemire <paul.lemire@kdab.com> | 2018-01-25 15:55:19 +0000 |
commit | e1b0e10340cf0a9c233774647cf316a7519a2093 (patch) | |
tree | bfe3af7babdd6a10314b02bb273a1b9ff30239ca | |
parent | f6a9174e5efeda68151f2d992fcd916fb2dd2c99 (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.cpp | 21 | ||||
-rw-r--r-- | src/core/transforms/qtransform.h | 2 |
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; |