Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
Divide::Quaternion< T > Class Template Reference

#include <Quaternion.h>

Public Member Functions

 Quaternion () noexcept
 
 Quaternion (T x, T y, T z, T w) noexcept
 
 Quaternion (const vec4< T > &values) noexcept
 
template<typename U = T>
requires std::is_same_v<U, F32>
 Quaternion (__m128 reg) noexcept
 
 Quaternion (const mat3< T > &rotationMatrix) noexcept
 
 Quaternion (const vec3< T > &axis, Angle::DEGREES< T > angle) noexcept
 
 Quaternion (const vec3< T > &forward, const vec3< T > &up=WORLD_Y_AXIS) noexcept
 
 Quaternion (Angle::DEGREES< T > pitch, Angle::DEGREES< T > yaw, Angle::DEGREES< T > roll) noexcept
 
 Quaternion (const Quaternion &q) noexcept
 
Quaternionoperator= (const Quaternion &q) noexcept
 
dot (const Quaternion &rq) const noexcept
 
magnitude () const
 
magnituteSQ () const
 
bool compare (const Quaternion &rq, Angle::DEGREES< T > tolerance=1e-3f) const
 
void set (const vec4< T > &values) noexcept
 
void set (T x, T y, T z, T w) noexcept
 
void set (const Quaternion &q) noexcept
 
void normalize () noexcept
 normalizing a quaternion works similar to a vector. This method will not
 
Quaternion inverse () const
 
Quaternion getConjugate () const
 We need to get the inverse of a quaternion to properly apply a.
 
Quaternion operator* (const Quaternion &rq) const noexcept
 
Quaternionoperator*= (const Quaternion &rq) noexcept
 Multiply so that rotations are applied in a left to right order.
 
Quaternion operator/ (const Quaternion &rq) const
 Dividing q1 by q2.
 
Quaternionoperator/= (const Quaternion &rq)
 
vec3< T > operator* (const vec3< T > &vec) const noexcept
 Multiplying a quaternion q with a vector v applies the q-rotation to v.
 
bool operator== (const Quaternion &rq) const
 
bool operator!= (const Quaternion &rq) const
 
Quaternionoperator+= (const Quaternion &rq)
 
Quaternionoperator-= (const Quaternion &rq)
 
Quaternionoperator*= (T scalar)
 
Quaternionoperator/= (T scalar)
 
Quaternion operator+ (const Quaternion &rq) const
 
Quaternion operator- (const Quaternion &rq) const
 
Quaternion operator* (T scalar) const
 
Quaternion operator/ (T scalar) const
 
void slerp (const Quaternion &q, F32 t) noexcept
 
void slerp (const Quaternion &q0, const Quaternion &q1, F32 t) noexcept
 
void fromAxisAngle (const vec3< T > &v, Angle::DEGREES< T > angle) noexcept
 Convert from Axis Angle.
 
void fromEuler (const vec3< Angle::DEGREES< T > > &v) noexcept
 
void fromEuler (Angle::DEGREES< T > pitch, Angle::DEGREES< T > yaw, Angle::DEGREES< T > roll) noexcept
 Convert from Euler Angles.
 
void lookRotation (vec3< T > forward, vec3< T > up)
 
void fromMatrix (const mat3< T > &rotationMatrix) noexcept
 
void fromMatrix (const mat4< T > &viewMatrix) noexcept
 
void getMatrix (mat3< T > &outMatrix) const noexcept
 Convert to Matrix.
 
void getAxisAngle (vec3< T > &axis, Angle::DEGREES< T > &angle) const
 Convert to Axis/Angles.
 
vec3< Angle::RADIANS< T > > getEuler () const noexcept
 
void fromAxes (const vec3< T > *axis)
 X/Y/Z Axis get/set a la Ogre: OgreQuaternion.cpp.
 
void fromAxes (const vec3< T > &xAxis, const vec3< T > &yAxis, const vec3< T > &zAxis)
 
void toAxes (vec3< T > *axis) const
 
void toAxes (vec3< T > &xAxis, vec3< T > &yAxis, vec3< T > &zAxis) const
 
vec3< T > xAxis () const noexcept
 
vec3< T > yAxis () const noexcept
 
vec3< T > zAxis () const noexcept
 
X () const noexcept
 
Y () const noexcept
 
Z () const noexcept
 
W () const noexcept
 
vec3< T > XYZ () const noexcept
 
template<typename U >
void X (U x) noexcept
 
template<typename U >
void Y (U y) noexcept
 
template<typename U >
void Z (U z) noexcept
 
template<typename U >
void W (U w) noexcept
 
void identity () noexcept
 
const vec4< T > & asVec4 () const noexcept
 
Quaternion< F32operator* (const Quaternion< F32 > &rq) const noexcept
 

Private Attributes

vec4< T > _elements
 

Detailed Description

template<typename T>
class Divide::Quaternion< T >

Definition at line 45 of file Quaternion.h.

Constructor & Destructor Documentation

◆ Quaternion() [1/9]

template<typename T >
Divide::Quaternion< T >::Quaternion
noexcept

Definition at line 72 of file Quaternion.inl.

◆ Quaternion() [2/9]

template<typename T >
Divide::Quaternion< T >::Quaternion ( x,
y,
z,
w 
)
noexcept

Definition at line 78 of file Quaternion.inl.

◆ Quaternion() [3/9]

template<typename T >
Divide::Quaternion< T >::Quaternion ( const vec4< T > &  values)
explicitnoexcept

Definition at line 84 of file Quaternion.inl.

◆ Quaternion() [4/9]

template<typename T >
template<typename U = T>
requires std::is_same_v<U, F32>
Divide::Quaternion< T >::Quaternion ( __m128  reg)
inlineexplicitnoexcept

Definition at line 54 of file Quaternion.h.

◆ Quaternion() [5/9]

template<typename T >
Divide::Quaternion< T >::Quaternion ( const mat3< T > &  rotationMatrix)
explicitnoexcept

Definition at line 90 of file Quaternion.inl.

◆ Quaternion() [6/9]

template<typename T >
Divide::Quaternion< T >::Quaternion ( const vec3< T > &  axis,
Angle::DEGREES< T >  angle 
)
noexcept

Definition at line 96 of file Quaternion.inl.

◆ Quaternion() [7/9]

template<typename T >
Divide::Quaternion< T >::Quaternion ( const vec3< T > &  forward,
const vec3< T > &  up = WORLD_Y_AXIS 
)
noexcept

Definition at line 102 of file Quaternion.inl.

◆ Quaternion() [8/9]

template<typename T >
Divide::Quaternion< T >::Quaternion ( Angle::DEGREES< T >  pitch,
Angle::DEGREES< T >  yaw,
Angle::DEGREES< T >  roll 
)
noexcept

Definition at line 108 of file Quaternion.inl.

◆ Quaternion() [9/9]

template<typename T >
Divide::Quaternion< T >::Quaternion ( const Quaternion< T > &  q)
noexcept

Definition at line 114 of file Quaternion.inl.

Member Function Documentation

◆ asVec4()

template<typename T >
const vec4< T > & Divide::Quaternion< T >::asVec4
noexcept

Definition at line 662 of file Quaternion.inl.

◆ compare()

template<typename T >
bool Divide::Quaternion< T >::compare ( const Quaternion< T > &  rq,
Angle::DEGREES< T >  tolerance = 1e-3f 
) const

Definition at line 141 of file Quaternion.inl.

◆ dot()

template<typename T >
T Divide::Quaternion< T >::dot ( const Quaternion< T > &  rq) const
noexcept

Definition at line 126 of file Quaternion.inl.

◆ fromAxes() [1/2]

template<typename T >
void Divide::Quaternion< T >::fromAxes ( const vec3< T > &  xAxis,
const vec3< T > &  yAxis,
const vec3< T > &  zAxis 
)

Definition at line 522 of file Quaternion.inl.

◆ fromAxes() [2/2]

template<typename T >
void Divide::Quaternion< T >::fromAxes ( const vec3< T > *  axis)

X/Y/Z Axis get/set a la Ogre: OgreQuaternion.cpp.

Definition at line 511 of file Quaternion.inl.

◆ fromAxisAngle()

template<typename T >
void Divide::Quaternion< T >::fromAxisAngle ( const vec3< T > &  v,
Angle::DEGREES< T >  angle 
)
noexcept

Convert from Axis Angle.

Definition at line 310 of file Quaternion.inl.

◆ fromEuler() [1/2]

template<typename T >
void Divide::Quaternion< T >::fromEuler ( Angle::DEGREES< T >  pitch,
Angle::DEGREES< T >  yaw,
Angle::DEGREES< T >  roll 
)
noexcept

Convert from Euler Angles.

Definition at line 321 of file Quaternion.inl.

◆ fromEuler() [2/2]

template<typename T >
void Divide::Quaternion< T >::fromEuler ( const vec3< Angle::DEGREES< T > > &  v)
noexcept

Definition at line 316 of file Quaternion.inl.

◆ fromMatrix() [1/2]

template<typename T >
void Divide::Quaternion< T >::fromMatrix ( const mat3< T > &  rotationMatrix)
noexcept

Definition at line 402 of file Quaternion.inl.

◆ fromMatrix() [2/2]

template<typename T >
void Divide::Quaternion< T >::fromMatrix ( const mat4< T > &  viewMatrix)
noexcept

Definition at line 395 of file Quaternion.inl.

◆ getAxisAngle()

template<typename T >
void Divide::Quaternion< T >::getAxisAngle ( vec3< T > &  axis,
Angle::DEGREES< T > &  angle 
) const

Convert to Axis/Angles.

Definition at line 472 of file Quaternion.inl.

◆ getConjugate()

template<typename T >
Quaternion< T > Divide::Quaternion< T >::getConjugate

We need to get the inverse of a quaternion to properly apply a.

The conjugate of a quaternion is the same as the inverse, as long as the

Definition at line 174 of file Quaternion.inl.

◆ getEuler()

template<typename T >
vec3< Angle::RADIANS< T > > Divide::Quaternion< T >::getEuler
noexcept

Definition at line 478 of file Quaternion.inl.

◆ getMatrix()

template<typename T >
void Divide::Quaternion< T >::getMatrix ( mat3< T > &  outMatrix) const
noexcept

Convert to Matrix.

Definition at line 442 of file Quaternion.inl.

◆ identity()

template<typename T >
void Divide::Quaternion< T >::identity
noexcept

Definition at line 657 of file Quaternion.inl.

◆ inverse()

template<typename T >
Quaternion< T > Divide::Quaternion< T >::inverse

Definition at line 169 of file Quaternion.inl.

◆ lookRotation()

template<typename T >
void Divide::Quaternion< T >::lookRotation ( vec3< T >  forward,
vec3< T >  up 
)

Definition at line 341 of file Quaternion.inl.

◆ magnitude()

template<typename T >
T Divide::Quaternion< T >::magnitude

Definition at line 131 of file Quaternion.inl.

◆ magnituteSQ()

template<typename T >
T Divide::Quaternion< T >::magnituteSQ

Definition at line 136 of file Quaternion.inl.

◆ normalize()

template<typename T >
void Divide::Quaternion< T >::normalize
noexcept

normalizing a quaternion works similar to a vector. This method will not

if the quaternion is close enough to being unit-length.

Definition at line 164 of file Quaternion.inl.

◆ operator!=()

template<typename T >
bool Divide::Quaternion< T >::operator!= ( const Quaternion< T > &  rq) const

Definition at line 224 of file Quaternion.inl.

◆ operator*() [1/4]

template<typename T >
Quaternion< T > Divide::Quaternion< T >::operator* ( const Quaternion< T > &  rq) const
noexcept

Multiplying q1 with q2 applies the rotation q2 to q1 the constructor takes its arguments as (x, y, z, w)

Definition at line 179 of file Quaternion.inl.

◆ operator*() [2/4]

Quaternion< F32 > Divide::Quaternion< F32 >::operator* ( const Quaternion< F32 > &  rq) const
inlinenoexcept

Definition at line 187 of file Quaternion.inl.

◆ operator*() [3/4]

template<typename T >
vec3< T > Divide::Quaternion< T >::operator* ( const vec3< T > &  vec) const
noexcept

Multiplying a quaternion q with a vector v applies the q-rotation to v.

Definition at line 209 of file Quaternion.inl.

◆ operator*() [4/4]

template<typename T >
Quaternion< T > Divide::Quaternion< T >::operator* ( scalar) const

Definition at line 267 of file Quaternion.inl.

◆ operator*=() [1/2]

template<typename T >
Quaternion< T > & Divide::Quaternion< T >::operator*= ( const Quaternion< T > &  rq)
noexcept

Multiply so that rotations are applied in a left to right order.

Definition at line 192 of file Quaternion.inl.

◆ operator*=() [2/2]

template<typename T >
Quaternion< T > & Divide::Quaternion< T >::operator*= ( scalar)

Definition at line 241 of file Quaternion.inl.

◆ operator+()

template<typename T >
Quaternion< T > Divide::Quaternion< T >::operator+ ( const Quaternion< T > &  rq) const

Definition at line 253 of file Quaternion.inl.

◆ operator+=()

template<typename T >
Quaternion< T > & Divide::Quaternion< T >::operator+= ( const Quaternion< T > &  rq)

Definition at line 229 of file Quaternion.inl.

◆ operator-()

template<typename T >
Quaternion< T > Divide::Quaternion< T >::operator- ( const Quaternion< T > &  rq) const

Definition at line 260 of file Quaternion.inl.

◆ operator-=()

template<typename T >
Quaternion< T > & Divide::Quaternion< T >::operator-= ( const Quaternion< T > &  rq)

Definition at line 235 of file Quaternion.inl.

◆ operator/() [1/2]

template<typename T >
Quaternion< T > Divide::Quaternion< T >::operator/ ( const Quaternion< T > &  rq) const

Dividing q1 by q2.

Definition at line 198 of file Quaternion.inl.

◆ operator/() [2/2]

template<typename T >
Quaternion< T > Divide::Quaternion< T >::operator/ ( scalar) const

Definition at line 274 of file Quaternion.inl.

◆ operator/=() [1/2]

template<typename T >
Quaternion< T > & Divide::Quaternion< T >::operator/= ( const Quaternion< T > &  rq)

Definition at line 203 of file Quaternion.inl.

◆ operator/=() [2/2]

template<typename T >
Quaternion< T > & Divide::Quaternion< T >::operator/= ( scalar)

Definition at line 247 of file Quaternion.inl.

◆ operator=()

template<typename T >
Quaternion< T > & Divide::Quaternion< T >::operator= ( const Quaternion< T > &  q)
noexcept

Definition at line 120 of file Quaternion.inl.

◆ operator==()

template<typename T >
bool Divide::Quaternion< T >::operator== ( const Quaternion< T > &  rq) const

Definition at line 219 of file Quaternion.inl.

◆ set() [1/3]

template<typename T >
void Divide::Quaternion< T >::set ( const Quaternion< T > &  q)
noexcept

Definition at line 159 of file Quaternion.inl.

◆ set() [2/3]

template<typename T >
void Divide::Quaternion< T >::set ( const vec4< T > &  values)
noexcept

Definition at line 149 of file Quaternion.inl.

◆ set() [3/3]

template<typename T >
void Divide::Quaternion< T >::set ( x,
y,
z,
w 
)
noexcept

Definition at line 154 of file Quaternion.inl.

◆ slerp() [1/2]

template<typename T >
void Divide::Quaternion< T >::slerp ( const Quaternion< T > &  q,
F32  t 
)
noexcept

Definition at line 281 of file Quaternion.inl.

◆ slerp() [2/2]

template<typename T >
void Divide::Quaternion< T >::slerp ( const Quaternion< T > &  q0,
const Quaternion< T > &  q1,
F32  t 
)
noexcept

Definition at line 286 of file Quaternion.inl.

◆ toAxes() [1/2]

template<typename T >
void Divide::Quaternion< T >::toAxes ( vec3< T > &  xAxis,
vec3< T > &  yAxis,
vec3< T > &  zAxis 
) const

Definition at line 539 of file Quaternion.inl.

◆ toAxes() [2/2]

template<typename T >
void Divide::Quaternion< T >::toAxes ( vec3< T > *  axis) const

Definition at line 534 of file Quaternion.inl.

◆ W() [1/2]

template<typename T >
T Divide::Quaternion< T >::W
noexcept

Definition at line 623 of file Quaternion.inl.

◆ W() [2/2]

template<typename T >
template<typename U >
void Divide::Quaternion< T >::W ( w)
noexcept

Definition at line 652 of file Quaternion.inl.

◆ X() [1/2]

template<typename T >
T Divide::Quaternion< T >::X
noexcept

Definition at line 608 of file Quaternion.inl.

◆ X() [2/2]

template<typename T >
template<typename U >
void Divide::Quaternion< T >::X ( x)
noexcept

Definition at line 634 of file Quaternion.inl.

◆ xAxis()

template<typename T >
vec3< T > Divide::Quaternion< T >::xAxis
noexcept

Definition at line 548 of file Quaternion.inl.

◆ XYZ()

template<typename T >
vec3< T > Divide::Quaternion< T >::XYZ
noexcept

Definition at line 628 of file Quaternion.inl.

◆ Y() [1/2]

template<typename T >
T Divide::Quaternion< T >::Y
noexcept

Definition at line 613 of file Quaternion.inl.

◆ Y() [2/2]

template<typename T >
template<typename U >
void Divide::Quaternion< T >::Y ( y)
noexcept

Definition at line 640 of file Quaternion.inl.

◆ yAxis()

template<typename T >
vec3< T > Divide::Quaternion< T >::yAxis
noexcept

Definition at line 568 of file Quaternion.inl.

◆ Z() [1/2]

template<typename T >
T Divide::Quaternion< T >::Z
noexcept

Definition at line 618 of file Quaternion.inl.

◆ Z() [2/2]

template<typename T >
template<typename U >
void Divide::Quaternion< T >::Z ( z)
noexcept

Definition at line 646 of file Quaternion.inl.

◆ zAxis()

template<typename T >
vec3< T > Divide::Quaternion< T >::zAxis
noexcept

Definition at line 588 of file Quaternion.inl.

Member Data Documentation

◆ _elements

template<typename T >
vec4<T> Divide::Quaternion< T >::_elements
private

Definition at line 177 of file Quaternion.h.


The documentation for this class was generated from the following files: