Irrlicht 3D Engine
irr::core::quaternion Class Reference

Quaternion class for representing rotations. More...

#include <quaternion.h>

Public Member Functions

 quaternion ()
 Default Constructor. More...
 
 quaternion (f32 x, f32 y, f32 z, f32 w)
 Constructor. More...
 
 quaternion (f32 x, f32 y, f32 z)
 Constructor which converts euler angles (radians) to a quaternion. More...
 
 quaternion (const vector3df &vec)
 Constructor which converts euler angles (radians) to a quaternion. More...
 
 quaternion (const matrix4 &mat)
 Constructor which converts a matrix to a quaternion. More...
 
f32 dotProduct (const quaternion &other) const
 Calculates the dot product. More...
 
bool equals (const quaternion &other, const f32 tolerance=ROUNDING_ERROR_f32) const
 returns if this quaternion equals the other one, taking floating point rounding errors into account More...
 
quaternionfromAngleAxis (f32 angle, const vector3df &axis)
 Create quaternion from rotation angle and rotation axis. More...
 
matrix4 getMatrix () const
 Creates a matrix from this quaternion. More...
 
void getMatrix (matrix4 &dest, const core::vector3df &translation=core::vector3df()) const
 Creates a matrix from this quaternion. More...
 
void getMatrix_transposed (matrix4 &dest) const
 Creates a matrix from this quaternion. More...
 
void getMatrixCenter (matrix4 &dest, const core::vector3df &center, const core::vector3df &translation) const
 
quaternionlerp (quaternion q1, quaternion q2, f32 time)
 Set this quaternion to the linear interpolation between two quaternions. More...
 
quaternionmakeIdentity ()
 Set quaternion to identity. More...
 
quaternionmakeInverse ()
 Inverts this quaternion. More...
 
quaternionnormalize ()
 Normalizes the quaternion. More...
 
bool operator!= (const quaternion &other) const
 inequality operator More...
 
quaternion operator* (const quaternion &other) const
 Multiplication operator. More...
 
quaternion operator* (f32 s) const
 Multiplication operator with scalar. More...
 
vector3df operator* (const vector3df &v) const
 Multiplication operator. More...
 
quaternionoperator*= (f32 s)
 Multiplication operator with scalar. More...
 
quaternionoperator*= (const quaternion &other)
 Multiplication operator. More...
 
quaternion operator+ (const quaternion &other) const
 Add operator. More...
 
quaternionoperator= (const quaternion &other)
 Assignment operator. More...
 
quaternionoperator= (const matrix4 &other)
 Matrix assignment operator. More...
 
bool operator== (const quaternion &other) const
 Equalilty operator. More...
 
quaternionrotationFromTo (const vector3df &from, const vector3df &to)
 Set quaternion to represent a rotation from one vector to another. More...
 
quaternionset (f32 x, f32 y, f32 z, f32 w)
 Sets new quaternion. More...
 
quaternionset (f32 x, f32 y, f32 z)
 Sets new quaternion based on euler angles (radians) More...
 
quaternionset (const core::vector3df &vec)
 Sets new quaternion based on euler angles (radians) More...
 
quaternionset (const core::quaternion &quat)
 Sets new quaternion from other quaternion. More...
 
quaternionslerp (quaternion q1, quaternion q2, f32 time, f32 threshold=.05f)
 Set this quaternion to the result of the spherical interpolation between two quaternions. More...
 
void toAngleAxis (f32 &angle, core::vector3df &axis) const
 Fills an angle (radians) around an axis (unit vector) More...
 
void toEuler (vector3df &euler) const
 Output this quaternion to an euler angle (radians) More...
 

Public Attributes

f32 W
 
f32 X
 Quaternion elements. More...
 
f32 Y
 
f32 Z
 

Detailed Description

Quaternion class for representing rotations.

It provides cheap combinations and avoids gimbal locks. Also useful for interpolations.

Definition at line 26 of file quaternion.h.

Constructor & Destructor Documentation

§ quaternion() [1/5]

irr::core::quaternion::quaternion ( )
inline

Default Constructor.

Definition at line 31 of file quaternion.h.

Referenced by operator*(), operator+(), and quaternion().

§ quaternion() [2/5]

§ quaternion() [3/5]

irr::core::quaternion::quaternion ( f32  x,
f32  y,
f32  z 
)
inline

Constructor which converts euler angles (radians) to a quaternion.

Definition at line 187 of file quaternion.h.

§ quaternion() [4/5]

irr::core::quaternion::quaternion ( const vector3df vec)
inline

Constructor which converts euler angles (radians) to a quaternion.

Definition at line 194 of file quaternion.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

§ quaternion() [5/5]

irr::core::quaternion::quaternion ( const matrix4 mat)
inline

Constructor which converts a matrix to a quaternion.

Definition at line 201 of file quaternion.h.

Member Function Documentation

§ dotProduct()

f32 irr::core::quaternion::dotProduct ( const quaternion other) const
inline

Calculates the dot product.

Definition at line 556 of file quaternion.h.

References W, X, Y, and Z.

Referenced by quaternion(), and slerp().

§ equals()

bool irr::core::quaternion::equals ( const quaternion other,
const f32  tolerance = ROUNDING_ERROR_f32 
) const
inline

returns if this quaternion equals the other one, taking floating point rounding errors into account

Definition at line 500 of file quaternion.h.

References irr::core::equals(), W, X, Y, and Z.

Referenced by quaternion().

§ fromAngleAxis()

quaternion & irr::core::quaternion::fromAngleAxis ( f32  angle,
const vector3df axis 
)
inline

Create quaternion from rotation angle and rotation axis.

axis must be unit length, angle in radians

Axis must be unit length. The quaternion representing the rotation is q = cos(A/2)+sin(A/2)*(x*i+y*j+z*k).

Parameters
angleRotation Angle in radians.
axisRotation axis.

Definition at line 563 of file quaternion.h.

References W, X, irr::core::vector3d< T >::X, Y, irr::core::vector3d< T >::Y, Z, and irr::core::vector3d< T >::Z.

Referenced by quaternion().

§ getMatrix() [1/2]

matrix4 irr::core::quaternion::getMatrix ( ) const
inline

Creates a matrix from this quaternion.

Definition at line 338 of file quaternion.h.

Referenced by quaternion().

§ getMatrix() [2/2]

void irr::core::quaternion::getMatrix ( matrix4 dest,
const core::vector3df center = core::vector3df() 
) const
inline

Creates a matrix from this quaternion.

Creates a matrix from this quaternion

Definition at line 349 of file quaternion.h.

References irr::core::CMatrix4< T >::setDefinitelyIdentityMatrix(), W, X, irr::core::vector3d< T >::X, Y, irr::core::vector3d< T >::Y, Z, and irr::core::vector3d< T >::Z.

§ getMatrix_transposed()

void irr::core::quaternion::getMatrix_transposed ( matrix4 dest) const
inline

Creates a matrix from this quaternion.

Definition at line 411 of file quaternion.h.

References irr::core::CMatrix4< T >::setDefinitelyIdentityMatrix(), W, X, Y, and Z.

Referenced by quaternion().

§ getMatrixCenter()

void irr::core::quaternion::getMatrixCenter ( matrix4 dest,
const core::vector3df center,
const core::vector3df translation 
) const
inline

Creates a matrix from this quaternion Rotate about a center point shortcut for core::quaternion q; q.rotationFromTo ( vin[i].Normal, forward ); q.getMatrixCenter ( lookat, center, newPos );

core::matrix4 m2; m2.setInverseTranslation ( center ); lookat *= m2;

core::matrix4 m3; m2.setTranslation ( newPos ); lookat *= m3;

Creates a matrix from this quaternion Rotate about a center point shortcut for core::quaternion q; q.rotationFromTo(vin[i].Normal, forward); q.getMatrix(lookat, center);

core::matrix4 m2; m2.setInverseTranslation(center); lookat *= m2;

Definition at line 388 of file quaternion.h.

References irr::core::CMatrix4< T >::setRotationCenter(), W, X, Y, and Z.

Referenced by quaternion().

§ lerp()

quaternion & irr::core::quaternion::lerp ( quaternion  q1,
quaternion  q2,
f32  time 
)
inline

Set this quaternion to the linear interpolation between two quaternions.

Parameters
q1First quaternion to be interpolated.
q2Second quaternion to be interpolated.
timeProgress of interpolation. For time=0 the result is q1, for time=1 the result is q2. Otherwise interpolation between q1 and q2.

Definition at line 523 of file quaternion.h.

Referenced by quaternion(), and slerp().

§ makeIdentity()

core::quaternion & irr::core::quaternion::makeIdentity ( )
inline

Set quaternion to identity.

Definition at line 649 of file quaternion.h.

References W, X, Y, and Z.

Referenced by quaternion(), and rotationFromTo().

§ makeInverse()

quaternion & irr::core::quaternion::makeInverse ( )
inline

Inverts this quaternion.

Definition at line 438 of file quaternion.h.

References X, Y, and Z.

Referenced by quaternion().

§ normalize()

quaternion & irr::core::quaternion::normalize ( )
inline

Normalizes the quaternion.

Definition at line 510 of file quaternion.h.

References irr::core::reciprocal_squareroot(), W, X, Y, and Z.

Referenced by operator=(), quaternion(), rotationFromTo(), and set().

§ operator!=()

bool irr::core::quaternion::operator!= ( const quaternion other) const
inline

inequality operator

Definition at line 217 of file quaternion.h.

Referenced by quaternion().

§ operator*() [1/3]

quaternion irr::core::quaternion::operator* ( const quaternion other) const
inline

Multiplication operator.

Definition at line 294 of file quaternion.h.

References W, X, Y, and Z.

Referenced by quaternion().

§ operator*() [2/3]

quaternion irr::core::quaternion::operator* ( f32  s) const
inline

Multiplication operator with scalar.

Definition at line 308 of file quaternion.h.

References quaternion(), W, X, Y, and Z.

§ operator*() [3/3]

vector3df irr::core::quaternion::operator* ( const vector3df v) const
inline

Multiplication operator.

Definition at line 634 of file quaternion.h.

References irr::core::vector3d< T >::crossProduct(), W, X, Y, and Z.

§ operator*=() [1/2]

quaternion & irr::core::quaternion::operator*= ( f32  s)
inline

Multiplication operator with scalar.

Definition at line 315 of file quaternion.h.

References W, X, Y, and Z.

Referenced by quaternion().

§ operator*=() [2/2]

quaternion & irr::core::quaternion::operator*= ( const quaternion other)
inline

Multiplication operator.

Definition at line 325 of file quaternion.h.

§ operator+()

quaternion irr::core::quaternion::operator+ ( const quaternion other) const
inline

Add operator.

Definition at line 331 of file quaternion.h.

References quaternion(), W, X, Y, and Z.

Referenced by quaternion().

§ operator=() [1/2]

quaternion & irr::core::quaternion::operator= ( const quaternion other)
inline

Assignment operator.

Definition at line 223 of file quaternion.h.

References W, X, Y, and Z.

Referenced by quaternion().

§ operator=() [2/2]

quaternion & irr::core::quaternion::operator= ( const matrix4 other)
inline

Matrix assignment operator.

Definition at line 234 of file quaternion.h.

References normalize(), W, X, Y, and Z.

§ operator==()

bool irr::core::quaternion::operator== ( const quaternion other) const
inline

Equalilty operator.

Definition at line 208 of file quaternion.h.

References W, X, Y, and Z.

Referenced by quaternion().

§ rotationFromTo()

core::quaternion & irr::core::quaternion::rotationFromTo ( const vector3df from,
const vector3df to 
)
inline

§ set() [1/4]

quaternion & irr::core::quaternion::set ( f32  x,
f32  y,
f32  z,
f32  w 
)
inline

Sets new quaternion.

Definition at line 446 of file quaternion.h.

References W, X, Y, and Z.

§ set() [2/4]

quaternion & irr::core::quaternion::set ( f32  x,
f32  y,
f32  z 
)
inline

Sets new quaternion based on euler angles (radians)

Definition at line 457 of file quaternion.h.

References normalize(), W, X, Y, and Z.

§ set() [3/4]

quaternion & irr::core::quaternion::set ( const core::vector3df vec)
inline

Sets new quaternion based on euler angles (radians)

Definition at line 487 of file quaternion.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

§ set() [4/4]

quaternion & irr::core::quaternion::set ( const core::quaternion quat)
inline

Sets new quaternion from other quaternion.

Definition at line 493 of file quaternion.h.

§ slerp()

quaternion & irr::core::quaternion::slerp ( quaternion  q1,
quaternion  q2,
f32  time,
f32  threshold = .05f 
)
inline

Set this quaternion to the result of the spherical interpolation between two quaternions.

Parameters
q1First quaternion to be interpolated.
q2Second quaternion to be interpolated.
timeProgress of interpolation. For time=0 the result is q1, for time=1 the result is q2. Otherwise interpolation between q1 and q2.
thresholdTo avoid inaccuracies at the end (time=1) the interpolation switches to linear interpolation at some point. This value defines how much of the remaining interpolation will be calculated with lerp. Everything from 1-threshold up will be linear interpolation.

Definition at line 531 of file quaternion.h.

References dotProduct(), lerp(), and irr::core::reciprocal().

Referenced by quaternion().

§ toAngleAxis()

void irr::core::quaternion::toAngleAxis ( f32 angle,
core::vector3df axis 
) const
inline

Fills an angle (radians) around an axis (unit vector)

Definition at line 575 of file quaternion.h.

References irr::core::iszero(), irr::core::reciprocal(), W, X, irr::core::vector3d< T >::X, Y, irr::core::vector3d< T >::Y, Z, and irr::core::vector3d< T >::Z.

Referenced by quaternion().

§ toEuler()

void irr::core::quaternion::toEuler ( vector3df euler) const
inline

Output this quaternion to an euler angle (radians)

Definition at line 596 of file quaternion.h.

References irr::core::clamp(), irr::core::equals(), irr::core::PI64, W, X, irr::core::vector3d< T >::X, Y, irr::core::vector3d< T >::Y, Z, and irr::core::vector3d< T >::Z.

Referenced by quaternion().

Member Data Documentation

§ W

§ X

§ Y

§ Z


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