Struct Quaternion
Represents a four dimensional mathematical quaternion. Euler angles are stored in: pitch, yaw, roll order (x, y, z).
Assembly: FlaxEngine.dll
File: Engine/Core/Math/Quaternion.h
Syntax
public struct Quaternion
Constructors
Quaternion()
Empty constructor.
Declaration
public Quaternion() = default
Quaternion(const float x, const float y, const float z, const float w)
Init
Declaration
public Quaternion(const float x, const float y, const float z, const float w)
Parameters
float
x
X component value. |
float
y
Y component value. |
float
z
Z component value. |
float
w
W component value. |
Quaternion(const Float4& value)
Init
Declaration
public Quaternion(const Float4& value)
Parameters
Float4
value
Vector to set value. |
Fields
Identity
Identity quaternion (represents no rotation).
Declaration
public static Quaternion Identity
Field Value
Quaternion
|
One
Quaternion with all components equal 1.
Declaration
public static Quaternion One
Field Value
Quaternion
|
Raw
The raw value.
Declaration
public float Raw[4]
Field Value
float
|
Tolerance
Equality tolerance factor used when comparing quaternions via dot operation.
Declaration
public static constexpr Real Tolerance = 0.999999f
Field Value
constexpr Real
|
W
The W component of the quaternion.
Declaration
public float W
Field Value
float
|
X
The X component of the quaternion.
Declaration
public float X
Field Value
float
|
Y
The Y component of the quaternion.
Declaration
public float Y
Field Value
float
|
Z
The Z component of the quaternion.
Declaration
public float Z
Field Value
float
|
Zero
Quaternion with all components equal 0.
Declaration
public static Quaternion Zero
Field Value
Quaternion
|
Methods
Add(const Quaternion& left, const Quaternion& right, Quaternion& result)
Declaration
public static void Add(const Quaternion& left, const Quaternion& right, Quaternion& result)
Parameters
Quaternion
left
|
Quaternion
right
|
Quaternion
result
|
AngleBetween(const Quaternion& a, const Quaternion& b)
Calculates the angle between two quaternions.
Declaration
public static float AngleBetween(const Quaternion& a, const Quaternion& b)
Parameters
Quaternion
a
First source quaternion. |
Quaternion
b
Second source quaternion. |
Returns
float
Returns the angle in degrees between two rotations a and b. |
Billboard(const Float3& objectPosition, const Float3& cameraPosition, const Float3& cameraUpFloat, const Float3& cameraForwardFloat, Quaternion& result)
Declaration
public static void Billboard(const Float3& objectPosition, const Float3& cameraPosition, const Float3& cameraUpFloat, const Float3& cameraForwardFloat, Quaternion& result)
Parameters
Float3
objectPosition
|
Float3
cameraPosition
|
Float3
cameraUpFloat
|
Float3
cameraForwardFloat
|
Quaternion
result
|
Conjugate()
Conjugates the quaternion
Declaration
public void Conjugate()
Conjugated()
Dot(const Quaternion& left, const Quaternion& right)
Calculates the dot product of two quaternions.
Declaration
public static float Dot(const Quaternion& left, const Quaternion& right)
Parameters
Quaternion
left
The first source quaternion. |
Quaternion
right
The second source quaternion. |
Returns
float
The dot product of the two quaternions. |
Euler(const Float3& euler)
Declaration
public static Quaternion Euler(const Float3& euler)
Parameters
Float3
euler
|
Returns
Quaternion
|
Euler(float x, float y, float z)
Declaration
public static Quaternion Euler(float x, float y, float z)
Parameters
float
x
|
float
y
|
float
z
|
Returns
Quaternion
|
FindBetween(const Float3& from, const Float3& to)
Gets the quaternion that will rotate vector from into vector to, around their plan perpendicular axis.The input vectors don't need to be normalized.
Declaration
public static Quaternion FindBetween(const Float3& from, const Float3& to)
Parameters
Float3
from
The source vector. |
Float3
to
The destination vector. |
Returns
Quaternion
The rotation. |
FindBetween(const Float3& from, const Float3& to, Quaternion& result)
Gets the quaternion that will rotate vector from into vector to, around their plan perpendicular axis.The input vectors don't need to be normalized.
Declaration
public static void FindBetween(const Float3& from, const Float3& to, Quaternion& result)
Parameters
Float3
from
The source vector. |
Float3
to
The destination vector. |
Quaternion
result
The result. |
FromDirection(const Float3& direction)
Calculates the orientation from the direction vector.
Declaration
public static Quaternion FromDirection(const Float3& direction)
Parameters
Float3
direction
The direction vector (normalized). |
Returns
Quaternion
The orientation. |
GetAngle()
Gets the angle of the quaternion.
Declaration
public float GetAngle() const
Returns
float
|
GetAxis()
Gets the axis components of the quaternion.
Declaration
public Float3 GetAxis() const
Returns
Float3
|
GetEuler()
Gets the euler angle (pitch, yaw, roll) in degrees.
Declaration
public Float3 GetEuler() const
Returns
Float3
|
GetRotationFromNormal(const Vector3& normal, const Transform& reference)
Gets rotation from a normal in relation to a transform. This function is especially useful for axis aligned faces, and with Physics::RayCast
Declaration
public static Quaternion GetRotationFromNormal(const Vector3& normal, const Transform& reference)
Parameters
Vector3
normal
The normal vector. |
Transform
reference
The reference transform. |
Returns
Quaternion
The rotation from the normal vector. |
GetRotationFromTo(const Float3& from, const Float3& to, const Float3& fallbackAxis)
Gets the shortest arc quaternion to rotate this vector to the destination vector.
Declaration
public static Quaternion GetRotationFromTo(const Float3& from, const Float3& to, const Float3& fallbackAxis)
Parameters
Float3
from
The source vector. |
Float3
to
The destination vector. |
Float3
fallbackAxis
The fallback axis. |
Returns
Quaternion
The rotation. |
GetRotationFromTo(const Float3& from, const Float3& to, Quaternion& result, const Float3& fallbackAxis)
Gets the shortest arc quaternion to rotate this vector to the destination vector.
Declaration
public static void GetRotationFromTo(const Float3& from, const Float3& to, Quaternion& result, const Float3& fallbackAxis)
Parameters
Float3
from
The source vector. |
Float3
to
The destination vector. |
Quaternion
result
The result. |
Float3
fallbackAxis
The fallback axis. |
Invert()
Conjugates and renormalizes the quaternion.
Declaration
public void Invert()
Invert(const Quaternion& value)
Calculates the inverse of the specified quaternion.
Declaration
public static Quaternion Invert(const Quaternion& value)
Parameters
Quaternion
value
The quaternion whose inverse is to be calculated. |
Returns
Quaternion
The inverse of the specified quaternion. |
Invert(const Quaternion& value, Quaternion& result)
Calculates the inverse of the specified quaternion.
Declaration
public static void Invert(const Quaternion& value, Quaternion& result)
Parameters
Quaternion
value
The quaternion whose inverse is to be calculated. |
Quaternion
result
When the method completes, contains the inverse of the specified quaternion. |
IsIdentity()
Gets a value indicating whether this instance is equivalent to the identity quaternion.
Declaration
public bool IsIdentity() const
Returns
bool
|
IsInfinity()
Returns true if quaternion has one or more components equal to +/- infinity.
Declaration
public bool IsInfinity() const
Returns
bool
|
IsNaN()
Returns true if quaternion has one or more components is not a number (NaN).
Declaration
public bool IsNaN() const
Returns
bool
|
IsNanOrInfinity()
Returns true if quaternion has one or more components equal to +/- infinity or NaN.
Declaration
public bool IsNanOrInfinity() const
Returns
bool
|
IsNormalized()
Gets a value indicting whether this instance is normalized.
Declaration
public bool IsNormalized() const
Returns
bool
|
Length()
Calculates the length of the quaternion.
Declaration
public float Length() const
Returns
float
|
LengthSquared()
Calculates the squared length of the quaternion.
Declaration
public float LengthSquared() const
Returns
float
|
Lerp(const Quaternion& start, const Quaternion& end, float amount)
Declaration
public static Quaternion Lerp(const Quaternion& start, const Quaternion& end, float amount)
Parameters
Quaternion
start
|
Quaternion
end
|
float
amount
|
Returns
Quaternion
|
Lerp(const Quaternion& start, const Quaternion& end, float amount, Quaternion& result)
Declaration
public static void Lerp(const Quaternion& start, const Quaternion& end, float amount, Quaternion& result)
Parameters
Quaternion
start
|
Quaternion
end
|
float
amount
|
Quaternion
result
|
LookAt(const Float3& eye, const Float3& target, const Float3& up, Quaternion& result)
Declaration
public static void LookAt(const Float3& eye, const Float3& target, const Float3& up, Quaternion& result)
Parameters
Float3
eye
|
Float3
target
|
Float3
up
|
Quaternion
result
|
LookRotation(const Float3& forward, const Float3& up)
Creates a rotation with the specified forward and upwards directions.
Declaration
public static Quaternion LookRotation(const Float3& forward, const Float3& up)
Parameters
Float3
forward
The forward direction. Direction to orient towards. |
Float3
up
Up direction. Constrains y axis orientation to a plane this vector lies on. This rule might be broken if forward and up direction are nearly parallel. |
Returns
Quaternion
The calculated quaternion. |
LookRotation(const Float3& forward, const Float3& up, Quaternion& result)
Creates a rotation with the specified forward and upwards directions.
Declaration
public static void LookRotation(const Float3& forward, const Float3& up, Quaternion& result)
Parameters
Float3
forward
The forward direction. Direction to orient towards. |
Float3
up
The up direction. Constrains y axis orientation to a plane this vector lies on. This rule might be broken if forward and up direction are nearly parallel. |
Quaternion
result
The calculated quaternion. |
Multiply(const Quaternion& left, const Quaternion& right, Quaternion& result)
Declaration
public static void Multiply(const Quaternion& left, const Quaternion& right, Quaternion& result)
Parameters
Quaternion
left
|
Quaternion
right
|
Quaternion
result
|
Multiply(const Quaternion& other)
Multiplies a quaternion by another.
Declaration
public void Multiply(const Quaternion& other)
Parameters
Quaternion
other
The other quaternion to multiply by. |
Multiply(const Quaternion& value, float scale, Quaternion& result)
Declaration
public static void Multiply(const Quaternion& value, float scale, Quaternion& result)
Parameters
Quaternion
value
|
float
scale
|
Quaternion
result
|
Multiply(float scale)
Scales a quaternion by the given value.
Declaration
public void Multiply(float scale)
Parameters
float
scale
The amount by which to scale the quaternion. |
NearEqual(const Quaternion& a, const Quaternion& b)
Determines whether the specified Quaternion structures are equal.
Declaration
public static bool NearEqual(const Quaternion& a, const Quaternion& b)
Parameters
Quaternion
a
The first Quaternion to compare. |
Quaternion
b
The second Quaternion to compare. |
Returns
bool
|
NearEqual(const Quaternion& a, const Quaternion& b, float epsilon)
Determines whether the specified Quaternion structures are equal.
Declaration
public static bool NearEqual(const Quaternion& a, const Quaternion& b, float epsilon)
Parameters
Quaternion
a
The first Quaternion to compare. |
Quaternion
b
The second Quaternion to compare. |
float
epsilon
The comparision threshold value. |
Returns
bool
|
Negate(const Quaternion& value, Quaternion& result)
Declaration
public static void Negate(const Quaternion& value, Quaternion& result)
Parameters
Quaternion
value
|
Quaternion
result
|
Normalize()
Converts the quaternion into a unit quaternion.
Declaration
public void Normalize()
operator!=(const Quaternion& other)
Determines whether the specified Quaternion is equal to this instance.
Declaration
public bool operator!=(const Quaternion& other) const
Parameters
Quaternion
other
The Quaternion to compare with this instance. |
Returns
bool
|
operator-(const Quaternion& b)
Subtracts two quaternions.
Declaration
public Quaternion operator-(const Quaternion& b) const
Parameters
Quaternion
b
The quaternion to subtract. |
Returns
Quaternion
The difference of the two quaternions. |
operator*(const Float3& vector)
Transforms a vector by the given rotation.
Declaration
public Float3 operator*(const Float3& vector) const
Parameters
Float3
vector
The vector to transform. |
Returns
Float3
The scaled vector. |
operator*(const Quaternion& b)
Multiplies two quaternions.
Declaration
public Quaternion operator*(const Quaternion& b) const
Parameters
Quaternion
b
The quaternion to multiply. |
Returns
Quaternion
The multiplied quaternion. |
operator*(float scale)
Scales a quaternion by the given value.
Declaration
public Quaternion operator*(float scale) const
Parameters
float
scale
The amount by which to scale the quaternion. |
Returns
Quaternion
The scaled quaternion. |
operator*=(const Quaternion& b)
Multiplies two quaternions.
Declaration
public Quaternion operator*=(const Quaternion& b)
Parameters
Quaternion
b
The quaternion to multiply. |
Returns
Quaternion
The multiplied quaternion. |
operator*=(float scale)
Scales a quaternion by the given value.
Declaration
public Quaternion operator*=(float scale)
Parameters
float
scale
The amount by which to scale the quaternion. |
Returns
Quaternion
This instance. |
operator+(const Quaternion& b)
Adds two quaternions.
Declaration
public Quaternion operator+(const Quaternion& b) const
Parameters
Quaternion
b
The quaternion to add. |
Returns
Quaternion
The sum of the two quaternions. |
operator+=(const Quaternion& b)
Adds two quaternions.
Declaration
public Quaternion operator+=(const Quaternion& b)
Parameters
Quaternion
b
The quaternion to add. |
Returns
Quaternion
The sum of the two quaternions. |
operator-=(const Quaternion& b)
Subtracts two quaternions.
Declaration
public Quaternion operator-=(const Quaternion& b)
Parameters
Quaternion
b
The quaternion to subtract. |
Returns
Quaternion
The difference of the two quaternions. |
operator==(const Quaternion& other)
Determines whether the specified Quaternion is equal to this instance.
Declaration
public bool operator==(const Quaternion& other) const
Parameters
Quaternion
other
The Quaternion to compare with this instance. |
Returns
bool
|
RotationAxis(const Float3& axis, float angle, Quaternion& result)
Declaration
public static void RotationAxis(const Float3& axis, float angle, Quaternion& result)
Parameters
Float3
axis
|
float
angle
|
Quaternion
result
|
RotationCosAxis(const Float3& axis, float cos, Quaternion& result)
Declaration
public static void RotationCosAxis(const Float3& axis, float cos, Quaternion& result)
Parameters
Float3
axis
|
float
cos
|
Quaternion
result
|
RotationLookAt(const Float3& forward, const Float3& up, Quaternion& result)
Declaration
public static void RotationLookAt(const Float3& forward, const Float3& up, Quaternion& result)
Parameters
Float3
forward
|
Float3
up
|
Quaternion
result
|
RotationMatrix(const Matrix& matrix)
Declaration
public static Quaternion RotationMatrix(const Matrix& matrix)
Parameters
Matrix
matrix
|
Returns
Quaternion
|
RotationMatrix(const Matrix& matrix, Quaternion& result)
Declaration
public static void RotationMatrix(const Matrix& matrix, Quaternion& result)
Parameters
Matrix
matrix
|
Quaternion
result
|
RotationMatrix(const Matrix3x3& matrix, Quaternion& result)
Declaration
public static void RotationMatrix(const Matrix3x3& matrix, Quaternion& result)
Parameters
Matrix3x3
matrix
|
Quaternion
result
|
RotationYawPitchRoll(float yaw, float pitch, float roll)
Declaration
public static Quaternion RotationYawPitchRoll(float yaw, float pitch, float roll)
Parameters
float
yaw
|
float
pitch
|
float
roll
|
Returns
Quaternion
|
RotationYawPitchRoll(float yaw, float pitch, float roll, Quaternion& result)
Declaration
public static void RotationYawPitchRoll(float yaw, float pitch, float roll, Quaternion& result)
Parameters
float
yaw
|
float
pitch
|
float
roll
|
Quaternion
result
|
Slerp(const Quaternion& start, const Quaternion& end, float amount)
Declaration
public static Quaternion Slerp(const Quaternion& start, const Quaternion& end, float amount)
Parameters
Quaternion
start
|
Quaternion
end
|
float
amount
|
Returns
Quaternion
|
Slerp(const Quaternion& start, const Quaternion& end, float amount, Quaternion& result)
Declaration
public static void Slerp(const Quaternion& start, const Quaternion& end, float amount, Quaternion& result)
Parameters
Quaternion
start
|
Quaternion
end
|
float
amount
|
Quaternion
result
|
Subtract(const Quaternion& left, const Quaternion& right, Quaternion& result)
Declaration
public static void Subtract(const Quaternion& left, const Quaternion& right, Quaternion& result)
Parameters
Quaternion
left
|
Quaternion
right
|
Quaternion
result
|