Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Quaternion

Add this in your code:

#include <engine/math/quaternion.h>

Description

Class representing rotations in 3D space.

Variables


NameTypeDescription
xfloatThe x component of the quaternion
yfloatThe y component of the quaternion
zfloatThe z component of the quaternion
wfloatThe w component of the quaternion

Constructors

Quaternion

Quaternion()

Code sample:

Quaternion q = Quaternion();
// Same as q = Quaternion::Identity();

Quaternion (X,Y,Z,W)

Normalized.

Parameters:

  • x: X value
  • y: Y value
  • z: Z value
  • w: W value
Quaternion(float x, float y, float z, float w)

Code sample:

Quaternion q = Quaternion(0.6860413f, 0.3493627f, -0.4916947f, -0.4068529f);

Quaternion (Vector4)

Normalized.

Parameters:

  • vector: X, Y, Z, W values
Quaternion(const Vector4& vector)

Code sample:

Quaternion q = Quaternion(Vector4(0.6860413f, 0.3493627f, -0.4916947f, -0.4068529f));

Static methods


Identity

Returns a quaternion representing no rotation (identity quaternion).

Quaternion Identity()

Code sample:

Quaternion identity = Quaternion::Identity();

Euler

Create a quaternion from Euler angles (in degrees).

Parameters:

  • x: X angle in degrees
  • y: Y angle in degrees
  • z: Z angle in degrees
Quaternion Euler(const float x, const float y, const float z)

Code sample:

Quaternion q = Quaternion::Euler(10, 20, 30);

AngleAxis

Make a quaternion from an angle and axis.

Parameters:

  • angle: angle in degrees
  • axis: Axis of the rotation
Quaternion AngleAxis(float angle, const Vector3& axis)

Code sample:

Quaternion q = Quaternion::AngleAxis(10, Vector3(1, 0, 0));

Inverse

Get the inverse of the quaternion.

Parameters:

  • q: Quaternion to inverse
Quaternion Inverse(const Quaternion& q)

Code sample:

Quaternion q = Quaternion::Euler(10, 20, 30);
Quaternion inverseQ = Quaternion::Inverse(q);

Lerp

Linearly interpolates between quaternions.

Parameters:

  • a: First quaternion
  • b: Second quaternion
  • t: Interpolation factor (0.0f to 1.0f)
Quaternion Lerp(const Quaternion& a, const Quaternion& b, const float t)

Code sample:

Quaternion a = Quaternion::Euler(10, 20, 30);
Quaternion b = Quaternion::Euler(90, 120, 10);
Quaternion mix = Quaternion::Lerp(a, b, 0.5f); // Mix of A and B
Quaternion lerp0 = Quaternion::Lerp(a, b, 0.0f); // Equals A
Quaternion lerp1 = Quaternion::Lerp(a, b, 1.0f); // Equals B

Dot

Get the dot product of two quaternions.

Parameters:

  • q1: First quaternion
  • q2: Second quaternion
float Dot(const Quaternion& q1, const Quaternion& q2)

Code sample:

Quaternion a = Quaternion::Euler(10, 20, 30);
Quaternion b = Quaternion::Euler(90, 120, 10);
Quaternion result = Quaternion::Dot(a, b);

Public methods


ToEuler

Converts the quaternion to Euler angles (in degrees).

Vector3 ToEuler() const

Code sample:

Quaternion a = Quaternion::Euler(10, 20, 30);
Vector3 euler = a.ToEuler();

Set

Set the quaternion values (Normalizes the quaternion).

Parameters:

  • x: X value
  • y: Y value
  • z: Z value
  • w: W value
void Set(const float x, const float y, const float z, const float w)

Code sample:

Quaternion a = Quaternion::Identity();
a.Set(0.6860413f * 2, 0.3493627f * 2, -0.4916947f * 2, -0.4068529f * 2);
// a = (0.6860413f, 0.3493627f, -0.4916947f, -0.4068529f)

Normalize

Normalize the quaternion.

void Normalize()

Code sample:

Quaternion a = Quaternion::Identity();
a.Set(0.6860413f, 0.3493627f, -0.4916947f, -0.4068529f);
a.Normalize();

Normalized

Returns a normalized copy of the quaternion.

Quaternion Normalized() const

Code sample:

Quaternion a = Quaternion::Identity();
a.Set(0.6860413f, 0.3493627f, -0.4916947f, -0.4068529f);
Quaternion normalizedA = a.Normalized();

GetForward

Get the forward direction vector of the quaternion.

Vector3 GetForward() const

Code sample:

Quaternion a = Quaternion::Identity();
a.Set(0.6860413f, 0.3493627f, -0.4916947f, -0.4068529f);
Vector3 forward = a.GetForward();

GetUp

Get the up direction vector of the quaternion.

Vector3 GetUp() const

Code sample:

Quaternion a = Quaternion::Identity();
a.Set(0.6860413f, 0.3493627f, -0.4916947f, -0.4068529f);
Vector3 up = a.GetUp();

GetRight

Get the right direction vector of the quaternion.

Vector3 GetRight() const

Code sample:

Quaternion a = Quaternion::Identity();
a.Set(0.6860413f, 0.3493627f, -0.4916947f, -0.4068529f);
Vector3 right = a.GetRight();

ToString

Return a string representation of the quaternion like "{x:0.0 y:0.0 z:0.0 w:1.0}"

 std::string ToString() const

Code sample:

Quaternion a = Quaternion::Identity();
a.Set(0.6860413f, 0.3493627f, -0.4916947f, -0.4068529f);
Debug::Print(a.ToString());
// Prints "{x:0.6860413 y:0.3493627 z:0.4916947 w:0.4068529}"

Operators

Quaternion operator*(const Quaternion& left, const Quaternion& right)
Vector3 operator*(const Quaternion& left, const Vector3& right) // From vector3.h
bool operator==(const Quaternion& left, const Quaternion& right)
bool operator!=(const Quaternion& left, const Quaternion& right)