22 #ifndef __D_QUATERNION_H__
23 #define __D_QUATERNION_H__
25 #include "dCoreStdafx.h"
37 dQuaternion (dFloat32 q0, dFloat32 q1, dFloat32 q2, dFloat32 q3);
43 void Scale (dFloat32 scale);
59 } D_GCC_NEWTON_ALIGN_32;
61 D_INLINE dQuaternion::dQuaternion()
69 D_INLINE dQuaternion::dQuaternion(dFloat32 Q0, dFloat32 Q1, dFloat32 Q2, dFloat32 Q3)
94 D_INLINE
void dQuaternion::Scale (dFloat32 scale)
102 D_INLINE
void dQuaternion::Normalize ()
104 Scale (dRsqrt (DotProduct (*
this)));
107 D_INLINE dFloat32 dQuaternion::DotProduct (
const dQuaternion &q1)
const
109 return m_w * q1.m_w + m_x * q1.m_x + m_y * q1.m_y + m_z * q1.m_z;
119 return dQuaternion (m_w + q.m_w, m_x + q.m_x, m_y + q.m_y, m_z + q.m_z);
124 return dQuaternion (m_w - q.m_w, m_x - q.m_x, m_y - q.m_y, m_z - q.m_z);
129 return dQuaternion (q.m_w * m_w - q.m_x * m_x - q.m_y * m_y - q.m_z * m_z,
130 q.m_x * m_w + q.m_w * m_x - q.m_z * m_y + q.m_y * m_z,
131 q.m_y * m_w + q.m_z * m_x + q.m_w * m_y - q.m_x * m_z,
132 q.m_z * m_w - q.m_y * m_x + q.m_x * m_y + q.m_w * m_z);