19#include <QtQuick3DUtils/private/qtquick3dutilsglobal_p.h>
20#include <QtQuick3DUtils/private/qssgdataref_p.h>
22#include <QtGui/QVector2D>
23#include <QtGui/QVector3D>
24#include <QtGui/QQuaternion>
25#include <QtGui/QMatrix3x3>
26#include <QtGui/QMatrix4x4>
27#include <QtGui/QColor>
29#include <QtCore/qdebug.h>
30#include <QtCore/QString>
31#include <QtCore/qloggingcategory.h>
32#include <QtCore/QIODevice>
33#include <QtCore/qmath.h>
35class tst_RotationDataClass;
43template<
int MINATTENUATION = 0,
int MAXATTENUATION = 1000>
45template<
int MINATTENUATION = 0,
int MAXATTENUATION = 1000>
81 float *writePtr(
matrix.data());
83 writePtr[0 * 4 + 2] *= -1;
84 writePtr[1 * 4 + 2] *= -1;
85 writePtr[2 * 4 + 0] *= -1;
86 writePtr[2 * 4 + 1] *= -1;
88 writePtr[3 * 4 + 2] *= -1;
112template<
typename TDataType>
115 return QSSGDataRef<TDataType>(byteSize ?
reinterpret_cast<TDataType *
>(baseData +
offset) :
nullptr,
116 byteSize /
sizeof(TDataType));
133 return QVector2D(absoluteCoordinates.x() -
float(
r.x()), absoluteCoordinates.y() -
float(
r.y()));
138 return QVector2D(
float(
r.width() / 2.0),
float(
r.height() / 2.0));
148 const QVector2D normalized((relativeCoords.x() / halfD.x()) - 1.0f, (relativeCoords.y() / halfD.y()) - 1.0f);
154 return { (rectRelativeCoords.x() /
halfDims(
r).
x()) - 1.0f, (rectRelativeCoords.y() /
halfDims(
r).
y()) - 1.0f };
166 return QVector2D(inRelativeCoords.x() +
float(
r.x()), inRelativeCoords.y() +
float(
r.y()));
179 , m_dirty(Dirty::Quaternion)
184 , m_dirty(Dirty::Euler)
190 m_dirty = Dirty::Quaternion;
195 m_quatRot =
r.normalized();
196 m_dirty = Dirty::Euler;
201 if (
a.m_dirty == Dirty::None &&
b.m_dirty == Dirty::None)
202 return fuzzyQuaternionCompare(
a.m_quatRot,
b.m_quatRot);
211 if (
a.m_dirty == Dirty::None)
220 if (
a.m_dirty == Dirty::None)
221 return fuzzyQuaternionCompare(
a.m_quatRot, rotation);
223 return fuzzyQuaternionCompare(
QQuaternion(
a), rotation);
229 if (m_dirty == Dirty::Euler) {
230 m_eulerRot = m_quatRot.toEulerAngles();
231 m_dirty = Dirty::None;
239 if (m_dirty == Dirty::Quaternion) {
240 m_quatRot = QQuaternion::fromEulerAngles(m_eulerRot).normalized();
241 m_dirty = Dirty::None;
253 friend class ::tst_RotationDataClass;
257 return double(q1.scalar()) * double(q2.scalar())
258 + double(q1.x()) * double(q2.x())
259 + double(q1.y()) * double(q2.y())
260 + double(q1.z()) * double(q2.z());
277 mutable Dirty m_dirty { Dirty::None };
284 if (!node->debugObjectName.isEmpty())
286 node->debugObjectName =
src->objectName();
287 if (node->debugObjectName.isEmpty())
289 if (node->debugObjectName.isEmpty())
The QColor class provides colors based on RGB, HSV or CMYK values.
The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space.
The QQuaternion class represents a quaternion consisting of a vector and scalar.
\inmodule QtCore\reentrant
static QString fromLatin1(QByteArrayView ba)
This is an overloaded member function, provided for convenience. It differs from the above function o...
static QString static QString asprintf(const char *format,...) Q_ATTRIBUTE_FORMAT_PRINTF(1
The QVector2D class represents a vector or vertex in 2D space.
constexpr float y() const noexcept
Returns the y coordinate of this point.
constexpr float x() const noexcept
Returns the x coordinate of this point.
The QVector3D class represents a vector or vertex in 3D space.
The QVector4D class represents a vector or vertex in 4D space.
RotationData(const QVector3D &r)
friend bool operator!=(const RotationData &a, const RotationData &b)
RotationData & operator=(const QQuaternion &r) noexcept
QVector3D getEulerRotation() const
QMatrix3x3 toRotationMatrix() const
RotationData(const QQuaternion &r)
QQuaternion getQuaternionRotation() const
friend bool operator==(const RotationData &a, const RotationData &b)
RotationData & operator=(const QVector3D &r) noexcept
void ensureDebugObjectName(T *node, QObject *src)
Q_DECL_CONSTEXPR float translateLinearAttenuation(float attenuation)
Q_DECL_CONSTEXPR float translateConstantAttenuation(float attenuation)
Q_DECL_CONSTEXPR float translateQuadraticAttenuation(float attenuation)
QColor Q_QUICK3DUTILS_EXPORT sRGBToLinearColor(const QColor &color)
QVector4D Q_QUICK3DUTILS_EXPORT sRGBToLinear(const QColor &color)
QMatrix3x3 Q_QUICK3DUTILS_EXPORT getUpper3x3(const QMatrix4x4 &m)
void Q_QUICK3DUTILS_EXPORT normalize(QMatrix4x4 &m)
QVector3D Q_QUICK3DUTILS_EXPORT rotate(const QMatrix4x4 &m, const QVector3D &v)
QVector3D Q_QUICK3DUTILS_EXPORT getScale(const QMatrix4x4 &m)
QVector3D Q_QUICK3DUTILS_EXPORT getPosition(const QMatrix4x4 &m)
bool Q_QUICK3DUTILS_EXPORT decompose(const QMatrix4x4 &m, QVector3D &position, QVector3D &scale, QQuaternion &rotation)
void flip(QMatrix4x4 &matrix)
float Q_QUICK3DUTILS_EXPORT magnitude(const QQuaternion &q)
bool Q_QUICK3DUTILS_EXPORT isFinite(const QQuaternion &q)
QVector3D Q_QUICK3DUTILS_EXPORT rotated(const QQuaternion &q, const QVector3D &v)
QVector3D Q_QUICK3DUTILS_EXPORT inverseRotated(const QQuaternion &q, const QVector3D &v)
bool Q_QUICK3DUTILS_EXPORT isSane(const QQuaternion &q)
bool Q_QUICK3DUTILS_EXPORT isUnit(const QQuaternion &q)
QVector2D toRectRelative(const QRectF &r, const QVector2D &absoluteCoordinates)
QVector2D halfDims(const QRectF &r)
QVector2D toAbsoluteCoords(const QRectF &r, const QVector2D &inRelativeCoords)
QVector2D absoluteToNormalizedCoordinates(const QRectF &r, const QVector2D &absoluteCoordinates)
QVector2D relativeToNormalizedCoordinates(const QRectF &r, QVector2D rectRelativeCoords)
QVector2D toNormalizedRectRelative(const QRectF &r, QVector2D absoluteCoordinates)
float Q_QUICK3DUTILS_EXPORT magnitude(const QVector2D &v)
float Q_QUICK3DUTILS_EXPORT magnitudeSquared(const QVector3D &v)
QVector3D minimum(const QVector3D &v1, const QVector3D &v2) Q_DECL_NOTHROW
QVector3D maximum(const QVector3D &v1, const QVector3D &v2) Q_DECL_NOTHROW
float Q_QUICK3DUTILS_EXPORT magnitude(const QVector3D &v)
bool Q_QUICK3DUTILS_EXPORT isFinite(const QVector3D &v)
float Q_QUICK3DUTILS_EXPORT normalize(QVector3D &v)
QVector3D radToDeg(const QVector3D &v)
QSSGDataRef< TDataType > PtrAtOffset(quint8 *baseData, quint32 offset, quint32 byteSize)
Q_QUICK3DUTILS_EXPORT const char * nonNull(const char *src)
QVector3D degToRad(const QVector3D &v)
Combined button and popup list for selecting options.
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
constexpr float qRadiansToDegrees(float radians)
constexpr float qDegreesToRadians(float degrees)
constexpr const T & qMin(const T &a, const T &b)
constexpr const T & qBound(const T &min, const T &val, const T &max)
constexpr const T & qMax(const T &a, const T &b)
constexpr T qAbs(const T &t)
GLint GLfloat GLfloat GLfloat v2
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr offset
GLuint GLenum GLenum transform
GLdouble GLdouble GLdouble GLdouble q
GLint GLenum GLboolean normalized
GLenum GLenum GLenum GLenum GLenum scale
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)