6 #ifndef _INC_cQuaternion_H
7 #define _INC_cQuaternion_H
20 template<
typename TYPE = DVALUEDEF_t>
43 if (this->x == 0 && this->y == 0 && this->z == 0 && this->w == 1)
101 InitRotationMatrix(rm);
106 InitRotationAxis(vAxis, fAngle);
109 #if defined(USE_DXM) || defined(USE_DX)
112 : SUPER_t(*(const SUPER_t*)&v)
118 inline operator const XMFLOAT4* ()
const
125 inline void Set(
const XMVECTOR& v)
127 ::XMStoreFloat4((
XMFLOAT4*)
this, v);
129 inline operator XMVECTOR ()
const
131 return ::XMLoadFloat4((
const XMFLOAT4*)
this);
164 Set(::XMQuaternionSlerp((XMVECTOR)q1, (XMVECTOR)q2, t));
172 this->x = t2 * q1.
x + t * q2.
x;
173 this->y = t2 * q1.
y + t * q2.
y;
174 this->z = t2 * q1.
z + t * q2.
z;
175 this->w = t2 * q1.
w + t * q2.
w;
184 Set(::XMQuaternionRotationAxis((XMVECTOR)vNorm, fAngle));
188 this->x = s * vNorm.
x;
189 this->y = s * vNorm.
y;
190 this->z = s * vNorm.
z;
208 Set(::XMQuaternionMultiply((XMVECTOR)q1, (XMVECTOR)q2));
210 this->x = q2.
w * q1.
x + q2.
x * q1.
w + q2.
y * q1.
z - q2.
z * q1.
y;
211 this->y = q2.
w * q1.
y - q2.
x * q1.
z + q2.
y * q1.
w + q2.
z * q1.
x;
212 this->z = q2.
w * q1.
z + q2.
x * q1.
y - q2.
y * q1.
x + q2.
z * q1.
w;
213 this->w = q2.
w * q1.
w - q2.
x * q1.
x - q2.
y * q1.
y - q2.
z * q1.
z;
222 void SetEulerY(
RADIANf_t fAngleY,
bool bMoveNormalized);
#define GRAYLIB_LINK
Definition: GrayLibBase.h:35
#define TYPE
Definition: StrT.cpp:38
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cMatrix.h:194
Definition: cQuaternion.h:22
cVecT4< TYPE > SUPER_t
Definition: cQuaternion.h:27
cQuaternionT() noexcept
Definition: cQuaternion.h:29
bool isIdentity() const noexcept
Definition: cQuaternion.h:40
cQuaternionT(TYPE _x, TYPE _y, TYPE _z, TYPE _w) noexcept
Definition: cQuaternion.h:31
bool IsNearQ(const SUPER_t &q, TYPE fDist=k_FLT_MIN2) const
Definition: cQuaternion.h:48
cQuaternionT(const SUPER_t &q) noexcept
Definition: cQuaternion.h:35
Definition: cQuaternion.h:76
void InitRotationAxis(const cVector3f &vNorm, RADIANf_t fAngle)
Definition: cQuaternion.h:178
cQuaternionf() noexcept
Definition: cQuaternion.h:89
void InitSlerp(const THIS_t &q1, const THIS_t &q2, DVALUE_t t)
Definition: cQuaternion.h:157
cQuaternionf(DVALUE_t _x, DVALUE_t _y, DVALUE_t _z, DVALUE_t _w)
Definition: cQuaternion.h:91
cQuaternionf THIS_t
Definition: cQuaternion.h:85
cQuaternionf(const SUPER_t &q)
Definition: cQuaternion.h:95
cQuaternionf(const cVector3f &vAxis, RADIANf_t fAngle)
Definition: cQuaternion.h:103
THIS_t operator*(const THIS_t &q) const
Definition: cQuaternion.h:142
void InitAngle(const cVector3f &v, RADIANf_t fAngle)
Definition: cQuaternion.h:194
void InitIdentity()
Definition: cQuaternion.h:152
cQuaternionf(const cMatrix4x4f &rm)
Definition: cQuaternion.h:99
UNITTEST_FRIEND(cQuaternion)
cQuaternionT< float > SUPER_t
Definition: cQuaternion.h:84
void InitMulQ(const THIS_t &q1, const THIS_t &q2)
Definition: cQuaternion.h:202
THIS_t GetMulQ(const THIS_t &q) const
Definition: cQuaternion.h:135
static const cQuaternionf k_Identity
Definition: cQuaternion.h:86
TYPE y
Definition: cVecT.h:545
TYPE z
Definition: cVecT.h:545
TYPE x
Definition: cVecT.h:545
TYPE z
Definition: cVecT.h:676
TYPE x
Definition: cVecT.h:676
TYPE w
Definition: cVecT.h:676
TYPE y
Definition: cVecT.h:676
float DVALUE_t
Dimension value type.
Definition: cVecT.h:48
_TYPE_C get_Normalized() const
Definition: cVecT.h:283
TYPE GetDot(const THIS_t &v2) const
Definition: cVecT.h:255
UNITTEST2_PREDEF(cQuadtree)
float RADIANf_t
type is float radians
Definition: Calc.h:27
static TYPE Abs(TYPE a) noexcept
similar to ABS(n) macro. Does nothing for unsigned types.
static bool IsNear(TYPE n1, TYPE n2, TYPE nDiff=(TYPE) k_FLT_MIN2) noexcept
Definition: Calc.h:135
static void SinCos(TYPE a, TYPE &s, TYPE &c)
get both sin and cos at one time. a = Euler angle in radians