Irrlicht 3D Engine
Loading...
Searching...
No Matches
irr::core::quaternion Class Reference

Quaternion class for representing rotations. More...

#include <quaternion.h>

Public Member Functions

 quaternion ()
 Default Constructor.
 quaternion (const matrix4 &mat)
 Constructor which converts a matrix to a quaternion.
 quaternion (const vector3df &vec)
 Constructor which converts euler angles (radians) to a quaternion.
 quaternion (f32 x, f32 y, f32 z)
 Constructor which converts euler angles (radians) to a quaternion.
 quaternion (f32 x, f32 y, f32 z, f32 w)
 Constructor.
f32 dotProduct (const quaternion &other) const
 Calculates the dot product.
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
quaternion & fromAngleAxis (f32 angle, const vector3df &axis)
 Create quaternion from rotation angle and rotation axis.
matrix4 getMatrix () const
 Creates a matrix from this quaternion.
void getMatrix (matrix4 &dest, const core::vector3df &translation=core::vector3df()) const
 Creates a matrix from this quaternion.
void getMatrix_transposed (matrix4 &dest) const
 Creates a matrix from this quaternion.
void getMatrixCenter (matrix4 &dest, const core::vector3df &center, const core::vector3df &translation) const
quaternion & lerp (quaternion q1, quaternion q2, f32 time)
 Set this quaternion to the linear interpolation between two quaternions.
quaternion & makeIdentity ()
 Set quaternion to identity.
quaternion & makeInverse ()
 Inverts this quaternion.
quaternion & normalize ()
 Normalizes the quaternion.
bool operator!= (const quaternion &other) const
 inequality operator
quaternion operator* (const quaternion &other) const
 Multiplication operator.
vector3df operator* (const vector3df &v) const
 Multiplication operator.
quaternion operator* (f32 s) const
 Multiplication operator with scalar.
quaternion & operator*= (const quaternion &other)
 Multiplication operator.
quaternion & operator*= (f32 s)
 Multiplication operator with scalar.
quaternion operator+ (const quaternion &other) const
 Add operator.
quaternion & operator= (const matrix4 &other)
 Matrix assignment operator.
quaternion & operator= (const quaternion &other)
 Assignment operator.
bool operator== (const quaternion &other) const
 Equalilty operator.
quaternion & rotationFromTo (const vector3df &from, const vector3df &to)
 Set quaternion to represent a rotation from one vector to another.
quaternion & set (const core::quaternion &quat)
 Sets new quaternion from other quaternion.
quaternion & set (const core::vector3df &vec)
 Sets new quaternion based on euler angles (radians).
quaternion & set (f32 x, f32 y, f32 z)
 Sets new quaternion based on euler angles (radians).
quaternion & set (f32 x, f32 y, f32 z, f32 w)
 Sets new quaternion.
quaternion & slerp (quaternion q1, quaternion q2, f32 time, f32 threshold=.05f)
 Set this quaternion to the result of the spherical interpolation between two quaternions.
void toAngleAxis (f32 &angle, core::vector3df &axis) const
 Fills an angle (radians) around an axis (unit vector).
void toEuler (vector3df &euler) const
 Output this quaternion to an euler angle (radians).

Public Attributes

f32 W
f32 X
 Quaternion elements.
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

◆ quaternion() [2/5]

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

Constructor.

Definition at line 34 of file quaternion.h.

References W, X, Y, and Z.

◆ 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.

References set().

◆ 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 set(), 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 quaternion(), W, X, Y, and Z.

Referenced by 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 quaternion(), irr::core::equals(), W, X, Y, and Z.

◆ 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 quaternion(), W, X, irr::core::vector3d< T >::X, Y, irr::core::vector3d< T >::Y, Z, and irr::core::vector3d< T >::Z.

◆ getMatrix() [1/2]

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

Creates a matrix from this quaternion.

Definition at line 338 of file quaternion.h.

References getMatrix().

Referenced by getMatrix().

◆ 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.

◆ 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.

◆ 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.

References quaternion().

Referenced by 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 rotationFromTo().

◆ makeInverse()

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

Inverts this quaternion.

Definition at line 438 of file quaternion.h.

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

◆ normalize()

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

Normalizes the quaternion.

Definition at line 510 of file quaternion.h.

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

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

◆ operator!=()

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

inequality operator

Definition at line 217 of file quaternion.h.

References 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 quaternion(), W, X, Y, and Z.

◆ operator*() [2/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*() [3/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*=() [1/2]

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

Multiplication operator.

Definition at line 325 of file quaternion.h.

References quaternion().

◆ operator*=() [2/2]

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

Multiplication operator with scalar.

Definition at line 315 of file quaternion.h.

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

◆ 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.

◆ operator=() [1/2]

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

Matrix assignment operator.

Definition at line 234 of file quaternion.h.

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

◆ operator=() [2/2]

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

Assignment operator.

Definition at line 223 of file quaternion.h.

References quaternion(), 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 quaternion(), W, X, Y, and Z.

◆ rotationFromTo()

◆ set() [1/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.

References quaternion().

◆ set() [2/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 quaternion(), set(), irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ set() [3/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 quaternion(), normalize(), W, X, Y, and Z.

◆ set() [4/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 quaternion(), W, X, Y, and Z.

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

◆ 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 quaternion(), dotProduct(), lerp(), and irr::core::reciprocal().

◆ 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.

◆ 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.

Member Data Documentation

◆ W

◆ X

◆ Y

◆ Z


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