Quaternion class for representing rotations. More...
#include <quaternion.h>
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.
irr::core::quaternion::quaternion | ( | ) | [inline] |
Default Constructor.
Definition at line 31 of file quaternion.h.
Referenced by operator*(), and operator+().
Constructor.
Definition at line 34 of file quaternion.h.
Constructor which converts euler angles (radians) to a quaternion.
Definition at line 187 of file quaternion.h.
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.
irr::core::quaternion::quaternion | ( | const matrix4 & | mat | ) | [inline] |
Constructor which converts a matrix to a quaternion.
Definition at line 201 of file quaternion.h.
f32 irr::core::quaternion::dotProduct | ( | const quaternion & | other | ) | const [inline] |
bool irr::core::quaternion::equals | ( | const quaternion & | other, |
const f32 | tolerance = ROUNDING_ERROR_f32 |
||
) | const [inline] |
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).
angle | Rotation Angle in radians. |
axis | Rotation 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.
matrix4 irr::core::quaternion::getMatrix | ( | ) | const [inline] |
Creates a matrix from this quaternion.
Definition at line 338 of file quaternion.h.
Referenced by irr::scene::SMD3QuaternionTag::setto().
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.
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.
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.
quaternion & irr::core::quaternion::lerp | ( | quaternion | q1, |
quaternion | q2, | ||
f32 | time | ||
) | [inline] |
Set this quaternion to the linear interpolation between two quaternions.
q1 | First quaternion to be interpolated. |
q2 | Second quaternion to be interpolated. |
time | Progress 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 slerp().
core::quaternion & irr::core::quaternion::makeIdentity | ( | ) | [inline] |
Set quaternion to identity.
Definition at line 649 of file quaternion.h.
Referenced by rotationFromTo().
quaternion & irr::core::quaternion::makeInverse | ( | ) | [inline] |
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=(), rotationFromTo(), and set().
bool irr::core::quaternion::operator!= | ( | const quaternion & | other | ) | const [inline] |
inequality operator
Definition at line 217 of file quaternion.h.
quaternion irr::core::quaternion::operator* | ( | const quaternion & | other | ) | const [inline] |
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.
Multiplication operator.
Definition at line 634 of file quaternion.h.
References irr::core::vector3d< T >::crossProduct(), W, X, Y, and Z.
quaternion & irr::core::quaternion::operator*= | ( | f32 | s | ) | [inline] |
quaternion & irr::core::quaternion::operator*= | ( | const quaternion & | other | ) | [inline] |
Multiplication operator.
Definition at line 325 of file quaternion.h.
quaternion irr::core::quaternion::operator+ | ( | const quaternion & | other | ) | const [inline] |
quaternion & irr::core::quaternion::operator= | ( | const quaternion & | other | ) | [inline] |
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.
bool irr::core::quaternion::operator== | ( | const quaternion & | other | ) | const [inline] |
core::quaternion & irr::core::quaternion::rotationFromTo | ( | const vector3df & | from, |
const vector3df & | to | ||
) | [inline] |
Set quaternion to represent a rotation from one vector to another.
Definition at line 658 of file quaternion.h.
References irr::core::vector3d< T >::crossProduct(), irr::core::vector3d< T >::dotProduct(), irr::core::vector3d< T >::getLength(), makeIdentity(), normalize(), irr::core::vector3d< T >::normalize(), irr::core::vector3d< T >::set(), irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.
quaternion & irr::core::quaternion::set | ( | f32 | x, |
f32 | y, | ||
f32 | z, | ||
f32 | w | ||
) | [inline] |
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.
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.
quaternion & irr::core::quaternion::set | ( | const core::quaternion & | quat | ) | [inline] |
Sets new quaternion from other quaternion.
Definition at line 493 of file quaternion.h.
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.
q1 | First quaternion to be interpolated. |
q2 | Second quaternion to be interpolated. |
time | Progress of interpolation. For time=0 the result is q1, for time=1 the result is q2. Otherwise interpolation between q1 and q2. |
threshold | To 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().
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.
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.
Definition at line 182 of file quaternion.h.
Referenced by dotProduct(), equals(), fromAngleAxis(), getMatrix(), getMatrix_transposed(), getMatrixCenter(), makeIdentity(), normalize(), operator*(), operator*=(), operator+(), operator=(), operator==(), set(), toAngleAxis(), and toEuler().
Quaternion elements.
Definition at line 179 of file quaternion.h.
Referenced by dotProduct(), equals(), fromAngleAxis(), getMatrix(), getMatrix_transposed(), getMatrixCenter(), makeIdentity(), makeInverse(), normalize(), operator*(), operator*=(), operator+(), operator=(), operator==(), set(), toAngleAxis(), and toEuler().
Definition at line 180 of file quaternion.h.
Referenced by dotProduct(), equals(), fromAngleAxis(), getMatrix(), getMatrix_transposed(), getMatrixCenter(), makeIdentity(), makeInverse(), normalize(), operator*(), operator*=(), operator+(), operator=(), operator==(), set(), toAngleAxis(), and toEuler().
Definition at line 181 of file quaternion.h.
Referenced by dotProduct(), equals(), fromAngleAxis(), getMatrix(), getMatrix_transposed(), getMatrixCenter(), makeIdentity(), makeInverse(), normalize(), operator*(), operator*=(), operator+(), operator=(), operator==(), set(), toAngleAxis(), and toEuler().