Unigine.quat Struct
This class represents a quaternion type. Quaternions represent a rotation. Typically, they are used for smooth interpolation between two angles, and for avoiding the gimbal lock problem that can occur with euler angles.
Quaternions add a fourth element to the [ x, y, z] values that define a vector, resulting in arbitrary 4-D vectors. The following example illustrates how each element of a unit quaternion relates to an axis-angle rotation, where q represents a unit quaternion (x, y, z, w), axis is normalized, and theta is the desired counterclockwise (CCW) rotation around the axis:
- q.x = sin(theta/2) * axis.x
- q.y = sin(theta/2) * axis.y
- q.z = sin(theta/2) * axis.z
- q.w = cos(theta/2)
Usage Example#
The following example creates a quaternion for node rotation: 60 degrees per second along Z axis.
// AppWorldLogic.cs file
public override int update()
{
/* ... */
// get Game instance and delta time value
Game game = Game.get();
float delta_time = game.getIFps();
// create quat for 60 degrees per second rotation along Z axis
quat rotation_delta = new quat(0.0f, 0.0f, 1.0f, 60 * delta_time);
// rotate the node
node.setWorldRotation(node.getWorldRotation() * rotation_delta);
/* ... */
}
In the example above, the quaternion was initialized by using four values: 3 axis components (x,y,z) and angle (w component of the quaternion). 1 value of the Z axis component shows that the rotation will be performed along Z axis.
See Also#
- An article on Quaternions and Spatial Rotation on Wikipedia.
- A video tutorial on moving and rotating the node by using quaternion (C++)
quat Class
Members
quat ( ) #
Default constructor. Produces an identity quaternion (0.0, 0.0, 0.0, 1.0).quat ( const quat & q ) #
Constructor. Initializes the quaternion by copying a given source quaternion.Arguments
- const quat & q - Source quaternion.
quat ( const vec3 & axis, float angle ) #
Constructor. Initializes the quaternion using given rotation axis and angle.Arguments
- const vec3 & axis - Rotation axis.
- float angle - Rotation angle, in degrees.
quat ( float angle_x, float angle_y, float angle_z ) #
Constructor. Initializes the quaternion using given angles for each axis.Arguments
- float angle_x - Rotation angle along the X axis, in degrees.
- float angle_y - Rotation angle along the Y axis, in degrees.
- float angle_z - Rotation angle along the Z axis, in degrees.
quat ( const vec3 & col0, const vec3 & col1, const vec3 & col2 ) #
Constructor. Initializes the quaternion using three given matrix columns represented by vec3 vectors.Arguments
- const vec3 & col0 - First matrix column.
- const vec3 & col1 - Second matrix column.
- const vec3 & col2 - Third matrix column.
quat ( float x, float y, float z, float angle ) #
Constructor. Initializes the quaternion using given float values.Arguments
- float x - X component of the quaternion.
- float y - Y component of the quaternion.
- float z - Z component of the quaternion.
- float angle - W component of the quaternion.
explicit quat ( const mat4 & m ) #
Constructor. Initializes the quaternion using a given mat4 source matrix (4x4).Arguments
- const mat4 & m - Source matrix (4x4).
explicit quat ( const dmat4 & m ) #
Constructor. Initializes the quaternion using a given dmat4 source matrix (3x4).Arguments
- const dmat4 & m - Source matrix (3x4).
explicit quat ( const float * q ) #
Constructor. Initializes the vector using a given pointer to the quaternion.Arguments
- const float * q - Pointer to the quaternion.
float & operator[] ( int i ) #
Performs array access to the quaternion item reference by using given item index.Arguments
- int i - Quaternion item index.
Return value
Quaternion item reference.float operator[] ( int i ) # const
Performs array access to the quaternion item by using given item index.Arguments
- int i - Quaternion item index.