Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qquick3dquaternionutils.cpp
Go to the documentation of this file.
1
// Copyright (C) 2020 The Qt Company Ltd.
2
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
// Qt-Security score:significant reason:default
4
5
6
#
include
"qquick3dquaternionutils_p.h"
7
#
include
<
QtQuick3DUtils
/
private
/
qssgutils_p
.
h
>
8
#
include
<
QtMath
>
9
10
QT_BEGIN_NAMESPACE
11
12
/*!
13
\qmltype Quaternion
14
\inqmlmodule QtQuick3D
15
\since 5.15
16
17
\brief Provides utility functions for quaternion.
18
19
The \c Quaternion is a global object with utility functions.
20
21
It is not instantiable; to use it, call the members of the global \c Quaternion object
22
directly. For example:
23
24
\qml
25
Node {
26
rotation: Quaternion.fromAxisAndAngle(Qt.vector3d(1, 0, 0), 45)
27
}
28
\endqml
29
*/
30
31
/*!
32
\qmlmethod quaternion QtQuick3D::Quaternion::fromAxisAndAngle(vector3d axis, real angle)
33
Creates a quaternion from \a axis and \a angle.
34
Returns the resulting quaternion.
35
*/
36
37
/*!
38
\qmlmethod quaternion QtQuick3D::Quaternion::fromAxisAndAngle(real x, real y, real z, real angle)
39
Creates a quaternion from \a x, \a y, \a z, and \a angle.
40
Returns the resulting quaternion.
41
*/
42
43
/*!
44
\qmlmethod quaternion QtQuick3D::Quaternion::fromAxesAndAngles(vector3d axis1, real angle1,
45
vector3d axis2, real angle2)
46
Creates a quaternion from \a axis1, \a angle1, \a axis2, and \a angle2.
47
Returns the resulting quaternion.
48
*/
49
50
/*!
51
\qmlmethod quaternion QtQuick3D::Quaternion::fromAxesAndAngles(vector3d axis1, real angle1,
52
vector3d axis2, real angle2,
53
vector3d axis3, real angle3)
54
Creates a quaternion from \a axis1, \a angle1, \a axis2, \a angle2, \a axis3, and \a angle3.
55
Returns the resulting quaternion.
56
*/
57
58
/*!
59
\qmlmethod quaternion QtQuick3D::Quaternion::fromEulerAngles(vector3d eulerAngles)
60
Creates a quaternion from \a eulerAngles.
61
Returns the resulting quaternion.
62
*/
63
64
/*!
65
\qmlmethod quaternion QtQuick3D::Quaternion::fromEulerAngles(real x, real y, real z)
66
Creates a quaternion from \a x, \a y, and \a z.
67
Returns the resulting quaternion.
68
*/
69
70
/*!
71
\qmlmethod quaternion QtQuick3D::Quaternion::lookAt(vector3d sourcePosition, vector3d targetPosition,
72
vector3d forwardDirection, vector3d upDirection)
73
Creates a quaternion from \a sourcePosition, \a targetPosition, \a forwardDirection, and
74
\a upDirection. This is used for getting a rotation value for pointing at a particular target,
75
and can be used to point a camera at a position in a scene.
76
77
\a forwardDirection defaults to \c Qt.vector3d(0, 0, -1)
78
\a upDirection defaults to \c Qt.vector3d(0, 1, 0)
79
80
Returns the resulting quaternion.
81
*/
82
83
QQuick3DQuaternionUtils::QQuick3DQuaternionUtils(QObject *parent) : QObject(parent)
84
{
85
86
}
87
88
QQuaternion QQuick3DQuaternionUtils::fromAxisAndAngle(
float
x,
float
y,
float
z,
float
angle)
89
{
90
return
QQuaternion::fromAxisAndAngle(x, y, z, angle);
91
}
92
93
QQuaternion QQuick3DQuaternionUtils::fromAxisAndAngle(
const
QVector3D &axis,
float
angle)
94
{
95
return
QQuaternion::fromAxisAndAngle(axis, angle);
96
}
97
98
QQuaternion QQuick3DQuaternionUtils::fromEulerAngles(
float
x,
float
y,
float
z)
99
{
100
return
QQuaternion::fromEulerAngles(x, y, z);
101
}
102
103
QQuaternion QQuick3DQuaternionUtils::fromEulerAngles(
const
QVector3D &eulerAngles)
104
{
105
return
QQuaternion::fromEulerAngles(eulerAngles);
106
}
107
108
QQuaternion QQuick3DQuaternionUtils::lookAt(
const
QVector3D &sourcePosition,
109
const
QVector3D &targetPosition,
110
const
QVector3D &forwardDirection,
111
const
QVector3D &upDirection)
112
{
113
QVector3D targetDirection = targetPosition - sourcePosition;
114
targetDirection.normalize();
115
116
const
QVector3D forwardDirectionNormal = forwardDirection.normalized();
117
QVector3D rotationAxis = QVector3D::crossProduct(forwardDirectionNormal, targetDirection);
118
119
const
QVector3D normalizedAxis = rotationAxis.normalized();
120
if
(qFuzzyIsNull(normalizedAxis.lengthSquared()))
121
rotationAxis = upDirection;
122
123
float
dot = QVector3D::dotProduct(forwardDirectionNormal, targetDirection);
124
dot = qBound(-1.0f, dot, 1.0f);
125
float
rotationAngle = qRadiansToDegrees(qAcos(dot));
126
127
return
QQuaternion::fromAxisAndAngle(rotationAxis, rotationAngle);
128
}
129
130
QQuaternion QQuick3DQuaternionUtils::fromAxesAndAngles(
const
QVector3D &axis1,
131
float
angle1,
132
const
QVector3D &axis2,
133
float
angle2,
134
const
QVector3D &axis3,
135
float
angle3)
136
{
137
const
QQuaternion q1 = QQuaternion::fromAxisAndAngle(axis1, angle1);
138
const
QQuaternion q2 = QQuaternion::fromAxisAndAngle(axis2, angle2);
139
const
QQuaternion q3 = QQuaternion::fromAxisAndAngle(axis3, angle3);
140
return
q3 * q2 * q1;
141
}
142
143
QQuaternion QQuick3DQuaternionUtils::fromAxesAndAngles(
const
QVector3D &axis1,
144
float
angle1,
145
const
QVector3D &axis2,
146
float
angle2)
147
{
148
const
QQuaternion q1 = QQuaternion::fromAxisAndAngle(axis1, angle1);
149
const
QQuaternion q2 = QQuaternion::fromAxisAndAngle(axis2, angle2);
150
return
q2 * q1;
151
}
152
153
QT_END_NAMESPACE
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
qtquick3d
src
quick3d
qquick3dquaternionutils.cpp
Generated on
for Qt by
1.18.0