#include "utility.h"
#include "mat4.h"
Go to the source code of this file.
Data Structures | |
struct | kmQuaternion |
Functions | |
kmQuaternion * | kmQuaternionConjugate (kmQuaternion *pOut, const kmQuaternion *pIn) |
Returns pOut, sets pOut to the conjugate of pIn. | |
kmScalar | kmQuaternionDot (const kmQuaternion *q1, const kmQuaternion *q2) |
Returns the dot product of the 2 quaternions. | |
kmQuaternion * | kmQuaternionExp (kmQuaternion *pOut, const kmQuaternion *pIn) |
Returns the exponential of the quaternion. | |
kmQuaternion * | kmQuaternionIdentity (kmQuaternion *pOut) |
Returns the inverse of the passed Quaternion. | |
kmQuaternion * | kmQuaternionInverse (kmQuaternion *pOut, const kmQuaternion *pIn) |
Returns true if the quaternion is an identity quaternion. | |
int | kmQuaternionIsIdentity (const kmQuaternion *pIn) |
Returns the length of the quaternion. | |
kmScalar | kmQuaternionLength (const kmQuaternion *pIn) |
Returns the length of the quaternion squared (prevents a sqrt). | |
kmScalar | kmQuaternionLengthSq (const kmQuaternion *pIn) |
Returns the natural logarithm. | |
kmQuaternion * | kmQuaternionLn (kmQuaternion *pOut, const kmQuaternion *pIn) |
Multiplies 2 quaternions together. | |
kmQuaternion * | kmQuaternionMultiply (kmQuaternion *pOut, const kmQuaternion *q1, const kmQuaternion *q2) |
Normalizes a quaternion. | |
kmQuaternion * | kmQuaternionNormalize (kmQuaternion *pOut, const kmQuaternion *pIn) |
Rotates a quaternion around an axis. | |
kmQuaternion * | kmQuaternionRotationAxis (kmQuaternion *pOut, const kmVec3 *pV, kmScalar angle) |
Creates a quaternion from a rotation matrix. | |
kmQuaternion * | kmQuaternionRotationMatrix (kmQuaternion *pOut, const kmMat4 *pIn) |
Create a quaternion from yaw, pitch and roll. | |
kmQuaternion * | kmQuaternionRotationYawPitchRoll (kmQuaternion *pOut, kmScalar yaw, kmScalar pitch, kmScalar roll) |
Interpolate between 2 quaternions. | |
kmQuaternion * | kmQuaternionSlerp (kmQuaternion *pOut, const kmQuaternion *q1, const kmQuaternion *q2, kmScalar t) |
Get the axis and angle of rotation from a quaternion. | |
void | kmQuaternionToAxisAngle (const kmQuaternion *pIn, kmVec3 *pVector, kmScalar *pAngle) |
Scale a quaternion. | |
kmQuaternion * | kmQuaternionScale (kmQuaternion *pOut, const kmQuaternion *pIn, kmScalar s) |
kmQuaternion * | kmQuaternionAssign (kmQuaternion *pOut, const kmQuaternion *pIn) |
kmQuaternion * | kmQuaternionAdd (kmQuaternion *pOut, const kmQuaternion *pQ1, const kmQuaternion *pQ2) |
kmQuaternion * | kmQuaternionRotationBetweenVec3 (kmQuaternion *pOut, const kmVec3 *vec1, const kmVec3 *vec2, const kmVec3 *fallback) |
kmVec3 * | kmQuaternionMultiplyVec3 (kmVec3 *pOut, const kmQuaternion *q, const kmVec3 *v) |
kmQuaternion* kmQuaternionAdd | ( | kmQuaternion * | pOut, | |
const kmQuaternion * | pQ1, | |||
const kmQuaternion * | pQ2 | |||
) |
Definition at line 374 of file quaternion.c.
References kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
Referenced by kmQuaternionSlerp().
kmQuaternion* kmQuaternionAssign | ( | kmQuaternion * | pOut, | |
const kmQuaternion * | pIn | |||
) |
Definition at line 367 of file quaternion.c.
kmQuaternion* kmQuaternionConjugate | ( | kmQuaternion * | pOut, | |
const kmQuaternion * | pIn | |||
) |
Returns pOut, sets pOut to the conjugate of pIn.
Returns pOut, sets pOut to the conjugate of pIn.
Returns the dot product of the 2 quaternions
Definition at line 36 of file quaternion.c.
References kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
Referenced by kmQuaternionInverse().
kmScalar kmQuaternionDot | ( | const kmQuaternion * | q1, | |
const kmQuaternion * | q2 | |||
) |
Returns the dot product of the 2 quaternions.
Definition at line 47 of file quaternion.c.
References kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
Referenced by kmQuaternionSlerp().
kmQuaternion* kmQuaternionExp | ( | kmQuaternion * | pOut, | |
const kmQuaternion * | pIn | |||
) |
Returns the exponential of the quaternion.
Makes the passed quaternion an identity quaternion
Definition at line 58 of file quaternion.c.
kmQuaternion* kmQuaternionIdentity | ( | kmQuaternion * | pOut | ) |
Returns the inverse of the passed Quaternion.
Definition at line 66 of file quaternion.c.
References kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
Referenced by kmQuaternionRotationBetweenVec3().
kmQuaternion* kmQuaternionInverse | ( | kmQuaternion * | pOut, | |
const kmQuaternion * | pIn | |||
) |
Returns true if the quaternion is an identity quaternion.
Get the conjugute and divide by the length
Definition at line 77 of file quaternion.c.
References kmEpsilon, kmQuaternionConjugate(), kmQuaternionLength(), kmQuaternionScale(), kmScalar, kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
int kmQuaternionIsIdentity | ( | const kmQuaternion * | pIn | ) |
Returns the length of the quaternion.
Definition at line 103 of file quaternion.c.
References kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
kmScalar kmQuaternionLength | ( | const kmQuaternion * | pIn | ) |
Returns the length of the quaternion squared (prevents a sqrt).
Definition at line 110 of file quaternion.c.
References kmQuaternionLengthSq().
Referenced by kmQuaternionInverse(), and kmQuaternionNormalize().
kmScalar kmQuaternionLengthSq | ( | const kmQuaternion * | pIn | ) |
Returns the natural logarithm.
Definition at line 116 of file quaternion.c.
References kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
Referenced by kmQuaternionLength().
kmQuaternion* kmQuaternionLn | ( | kmQuaternion * | pOut, | |
const kmQuaternion * | pIn | |||
) |
kmQuaternion* kmQuaternionMultiply | ( | kmQuaternion * | pOut, | |
const kmQuaternion * | q1, | |||
const kmQuaternion * | q2 | |||
) |
Normalizes a quaternion.
Definition at line 139 of file quaternion.c.
References kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
kmVec3* kmQuaternionMultiplyVec3 | ( | kmVec3 * | pOut, | |
const kmQuaternion * | q, | |||
const kmVec3 * | v | |||
) |
Definition at line 459 of file quaternion.c.
References kmVec3Add(), kmVec3Cross(), kmVec3Scale(), kmQuaternion::w, kmQuaternion::x, kmVec3::x, kmQuaternion::y, kmVec3::y, kmQuaternion::z, and kmVec3::z.
kmQuaternion* kmQuaternionNormalize | ( | kmQuaternion * | pOut, | |
const kmQuaternion * | pIn | |||
) |
Rotates a quaternion around an axis.
Definition at line 152 of file quaternion.c.
References kmEpsilon, kmQuaternionLength(), kmQuaternionScale(), and kmScalar.
Referenced by kmQuaternionRotationBetweenVec3(), kmQuaternionRotationMatrix(), and kmQuaternionRotationYawPitchRoll().
kmQuaternion* kmQuaternionRotationAxis | ( | kmQuaternion * | pOut, | |
const kmVec3 * | pV, | |||
kmScalar | angle | |||
) |
Creates a quaternion from a rotation matrix.
Definition at line 163 of file quaternion.c.
References kmScalar, kmQuaternion::w, kmVec3::x, kmQuaternion::x, kmVec3::y, kmQuaternion::y, kmVec3::z, and kmQuaternion::z.
Referenced by kmQuaternionRotationBetweenVec3().
kmQuaternion* kmQuaternionRotationBetweenVec3 | ( | kmQuaternion * | pOut, | |
const kmVec3 * | vec1, | |||
const kmVec3 * | vec2, | |||
const kmVec3 * | fallback | |||
) |
Adapted from the OGRE engine!
Gets the shortest arc quaternion to rotate this vector to the destination vector.
Definition at line 395 of file quaternion.c.
References kmEpsilon, kmPI, kmQuaternionIdentity(), kmQuaternionNormalize(), kmQuaternionRotationAxis(), kmScalar, kmVec3Assign(), kmVec3Cross(), kmVec3Dot(), kmVec3LengthSq(), kmVec3Normalize(), kmQuaternion::w, kmQuaternion::x, kmVec3::x, kmQuaternion::y, kmVec3::y, kmQuaternion::z, and kmVec3::z.
kmQuaternion* kmQuaternionRotationMatrix | ( | kmQuaternion * | pOut, | |
const kmMat4 * | pIn | |||
) |
Create a quaternion from yaw, pitch and roll.
Definition at line 179 of file quaternion.c.
References kmEpsilon, kmQuaternionNormalize(), kmScalar, kmMat4::mat, kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
kmQuaternion* kmQuaternionRotationYawPitchRoll | ( | kmQuaternion * | pOut, | |
kmScalar | yaw, | |||
kmScalar | pitch, | |||
kmScalar | roll | |||
) |
Interpolate between 2 quaternions.
Definition at line 256 of file quaternion.c.
References kmDegreesToRadians(), kmQuaternionNormalize(), kmScalar, kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
kmQuaternion* kmQuaternionScale | ( | kmQuaternion * | pOut, | |
const kmQuaternion * | pIn, | |||
kmScalar | s | |||
) |
Definition at line 355 of file quaternion.c.
References kmQuaternion::w, kmQuaternion::x, kmQuaternion::y, and kmQuaternion::z.
Referenced by kmQuaternionInverse(), kmQuaternionNormalize(), and kmQuaternionSlerp().
kmQuaternion* kmQuaternionSlerp | ( | kmQuaternion * | pOut, | |
const kmQuaternion * | q1, | |||
const kmQuaternion * | q2, | |||
kmScalar | t | |||
) |
Get the axis and angle of rotation from a quaternion.
Definition at line 291 of file quaternion.c.
References kmQuaternionAdd(), kmQuaternionDot(), kmQuaternionScale(), kmScalar, and kmSQR().
void kmQuaternionToAxisAngle | ( | const kmQuaternion * | pIn, | |
kmVec3 * | pVector, | |||
kmScalar * | pAngle | |||
) |
Scale a quaternion.
Definition at line 325 of file quaternion.c.
References kmEpsilon, kmScalar, kmSQR(), kmVec3Normalize(), kmQuaternion::w, kmVec3::x, kmQuaternion::x, kmVec3::y, kmQuaternion::y, kmVec3::z, and kmQuaternion::z.