3PL_ALWAYS_INLINE plSimdQuat::plSimdQuat() =
default;
5PL_ALWAYS_INLINE plSimdQuat::plSimdQuat(
const plSimdVec4f& v)
28 res.m_v = vRotationAxis * s;
46 ref_vAxis.Set(1.0f, 0.0f, 0.0f, 0.0f);
53 ref_fAngle = acos * 2;
68 const plSimdVec4f yy2_xx2_xx2 = xx2yy2zz2.Get<plSwizzle::YXXX>();
69 const plSimdVec4f zz2_zz2_yy2 = xx2yy2zz2.Get<plSwizzle::ZZYX>();
77 const plSimdVec4f x_y_x = xyz.Get<plSwizzle::XYXX>();
78 const plSimdVec4f y2_z2_z2 = x2y2z2.Get<plSwizzle::YZZX>();
81 const plSimdVec4f z2_x2_y2 = x2y2z2.Get<plSwizzle::ZXYX>();
107 return m_v.IsNormalized<4>(fEpsilon);
112 return m_v.IsNaN<4>();
124 return v + t * m_v.w() + m_v.
CrossRH(t);
131 q.m_v = q2.m_v * m_v.w() + m_v * q2.m_v.w() + m_v.
CrossRH(q2.m_v);
132 q.m_v.SetW(m_v.w() * q2.m_v.w() - m_v.Dot<3>(q2.m_v));
137PL_ALWAYS_INLINE
bool plSimdQuat::operator==(
const plSimdQuat& q2)
const
139 return (m_v == q2.m_v).AllSet<4>();
142PL_ALWAYS_INLINE
bool plSimdQuat::operator!=(
const plSimdQuat& q2)
const
144 return (m_v != q2.m_v).AnySet<4>();
Float wrapper struct for a safe usage and conversions of angles.
Definition Angle.h:10
static constexpr plAngle MakeFromRadian(float fRadian)
Creates an instance of plAngle that was initialized from radian. (No need for any conversion)
Definition Angle_inl.h:38
static plSimdFloat MakeZero()
Creates an plSimdFloat that is initialized to zero.
Definition FPUFloat_inl.h:36
A 4x4 matrix class.
Definition SimdMat4f.h:7
static plSimdMat4f MakeFromColumns(const plSimdVec4f &vCol0, const plSimdVec4f &vCol1, const plSimdVec4f &vCol2, const plSimdVec4f &vCol3)
Creates a matrix from 4 column vectors.
Definition SimdMat4f_inl.h:16
static plSimdQuat MakeFromElements(plSimdFloat x, plSimdFloat y, plSimdFloat z, plSimdFloat w)
Sets the individual elements of the quaternion directly. Note that x,y,z do NOT represent a rotation ...
Definition SimdQuat_inl.h:15
static plSimdQuat MakeFromAxisAndAngle(const plSimdVec4f &vRotationAxis, const plSimdFloat &fAngle)
Creates a quaternion from a rotation-axis and an angle (angle is given in Radians or as an plAngle)
Definition SimdQuat_inl.h:20
plSimdMat4f GetAsMat4() const
Returns the Quaternion as a matrix.
Definition SimdQuat_inl.h:58
plSimdVec4f operator*(const plSimdVec4f &v) const
Rotates v by q.
Definition SimdQuat_inl.h:120
plSimdQuat operator-() const
Returns a Quaternion that represents the negative / inverted rotation.
Definition SimdQuat_inl.h:115
bool IsNaN() const
Checks whether any component is NaN.
Definition SimdQuat_inl.h:110
bool IsValid(const plSimdFloat &fEpsilon=plMath::DefaultEpsilon< float >()) const
Checks whether all components are neither NaN nor infinite and that the quaternion is normalized.
Definition SimdQuat_inl.h:105
static const plSimdQuat MakeIdentity()
Static function that returns a quaternion that represents the identity rotation (none).
Definition SimdQuat_inl.h:10
plResult GetRotationAxisAndAngle(plSimdVec4f &ref_vAxis, plSimdFloat &ref_fAngle, const plSimdFloat &fEpsilon=plMath::DefaultEpsilon< float >()) const
Returns the rotation-axis and angle (in Radians), that this quaternion rotates around.
Definition SimdQuat_inl.h:38
void Normalize()
Normalizes the quaternion to unit length. ALL rotation-quaternions should be normalized at all times ...
Definition SimdQuat_inl.h:33
A 4-component SIMD vector class.
Definition SimdVec4f.h:8
plSimdVec4f CrossRH(const plSimdVec4f &v) const
3D cross product, w is ignored.
Definition FPUVec4f_inl.h:473
plSimdVec4f GetCombined(const plSimdVec4f &other) const
x = this[s0], y = this[s1], z = other[s2], w = other[s3]
PL_ALWAYS_INLINE plAngle ACos(float f)
Returns the arcus cosinus of f.
Definition MathFloat_inl.h:82
PL_ALWAYS_INLINE float Sin(plAngle a)
***** Trigonometric Functions *****
Definition MathFloat_inl.h:62
PL_ALWAYS_INLINE float Cos(plAngle a)
Takes an angle, returns its cosine.
Definition MathFloat_inl.h:67
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54