quaternionsΒΆ
Header: cglm/quat.h
Important: cglm stores quaternion as [x, y, z, w] in memory since v0.4.0 it was [w, x, y, z] before v0.4.0 ( v0.3.5 and earlier ). w is real part.
What you can do with quaternions with existing functions is (Some of them):
- You can rotate transform matrix using quaterion
- You can rotate vector using quaterion
- You can create view matrix using quaterion
- You can create a lookrotation (from source point to dest)
Table of contents (click to go):ΒΆ
Macros:
- GLM_QUAT_IDENTITY_INIT
- GLM_QUAT_IDENTITY
Functions:
glm_quat_identity()
glm_quat_identity_array()
glm_quat_init()
glm_quat()
glm_quatv()
glm_quat_copy()
glm_quat_from_vecs()
glm_quat_norm()
glm_quat_normalize()
glm_quat_normalize_to()
glm_quat_dot()
glm_quat_conjugate()
glm_quat_inv()
glm_quat_add()
glm_quat_sub()
glm_quat_real()
glm_quat_imag()
glm_quat_imagn()
glm_quat_imaglen()
glm_quat_angle()
glm_quat_axis()
glm_quat_mul()
glm_quat_mat4()
glm_quat_mat4t()
glm_quat_mat3()
glm_quat_mat3t()
glm_quat_lerp()
glm_quat_nlerp()
glm_quat_slerp()
glm_quat_look()
glm_quat_for()
glm_quat_forp()
glm_quat_rotatev()
glm_quat_rotate()
glm_quat_rotate_at()
glm_quat_rotate_atm()
glm_quat_make()
Functions documentationΒΆ
-
void
glm_quat_identity
(versor q)ΒΆ - makes given quat to identity
- Parameters:
- [in, out] q quaternion
-
void
glm_quat_identity_array
(versor * __restrict q, size_t count)ΒΆ - make given quaternion arrayβs each element identity quaternion
- Parameters:
- [in, out] q quat array (must be aligned (16) if alignment is not disabled)[in] count count of quaternions
-
void
glm_quat_init
(versor q, float x, float y, float z, float w)ΒΆ - inits quaternion with given values
- Parameters:
- [out] q quaternion[in] x imag.x[in] y imag.y[in] z imag.z[in] w w (real part)
-
void
glm_quat
(versor q, float angle, float x, float y, float z)ΒΆ - creates NEW quaternion with individual axis componentsgiven axis will be normalized
- Parameters:
- [out] q quaternion[in] angle angle (radians)[in] x axis.x[in] y axis.y[in] z axis.z
-
void
glm_quatv
(versor q, float angle, vec3 axis)ΒΆ - creates NEW quaternion with axis vectorgiven axis will be normalized
- Parameters:
- [out] q quaternion[in] angle angle (radians)[in] axis axis (will be normalized)
-
void
glm_quat_copy
(versor q, versor dest)ΒΆ - copy quaternion to another one
- Parameters:
- [in] q source quaternion[out] dest destination quaternion
-
void
glm_quat_from_vecs
(vec3 a, vec3 b, versor dest)ΒΆ - compute unit quaternion needed to rotate a into b
- References:
- Parameters:
- [in] a unit vector[in] b unit vector[in] dest unit quaternion
-
float
glm_quat_norm
(versor q)ΒΆ - returns norm (magnitude) of quaternion
- Parameters:
- [in] a quaternion
- Returns:
- norm (magnitude)
-
void
glm_quat_normalize_to
(versor q, versor dest)ΒΆ - normalize quaternion and store result in dest, original one will not be normalized
- Parameters:
- [in] q quaternion to normalize into[out] dest destination quaternion
-
void
glm_quat_normalize
(versor q)ΒΆ - normalize quaternion
- Parameters:
- [in, out] q quaternion
-
float
glm_quat_dot
(versor p, versor q)ΒΆ dot product of two quaternion
- Parameters:
- [in] p quaternion 1[in] q quaternion 2
- Returns:
- dot product
-
void
glm_quat_conjugate
(versor q, versor dest)ΒΆ conjugate of quaternion
- Parameters:
- [in] q quaternion[in] dest conjugate
-
void
glm_quat_inv
(versor q, versor dest)ΒΆ inverse of non-zero quaternion
- Parameters:
- [in] q quaternion[in] dest inverse quaternion
-
void
glm_quat_add
(versor p, versor q, versor dest)ΒΆ add (componentwise) two quaternions and store result in dest
- Parameters:
- [in] p quaternion 1[in] q quaternion 2[in] dest result quaternion
-
void
glm_quat_sub
(versor p, versor q, versor dest)ΒΆ subtract (componentwise) two quaternions and store result in dest
- Parameters:
- [in] p quaternion 1[in] q quaternion 2[in] dest result quaternion
-
float
glm_quat_real
(versor q)ΒΆ returns real part of quaternion
- Parameters:
- [in] q quaternion
- Returns:
- real part (quat.w)
-
void
glm_quat_imag
(versor q, vec3 dest)ΒΆ returns imaginary part of quaternion
- Parameters:
- [in] q quaternion[out] dest imag
-
void
glm_quat_imagn
(versor q, vec3 dest)ΒΆ returns normalized imaginary part of quaternion
- Parameters:
- [in] q quaternion[out] dest imag
-
float
glm_quat_imaglen
(versor q)ΒΆ returns length of imaginary part of quaternion
- Parameters:
- [in] q quaternion
- Returns:
- norm of imaginary part
-
float
glm_quat_angle
(versor q)ΒΆ returns angle of quaternion
- Parameters:
- [in] q quaternion
- Returns:
- angles of quat (radians)
-
void
glm_quat_axis
(versor q, versor dest)ΒΆ axis of quaternion
- Parameters:
- [in] p quaternion[out] dest axis of quaternion
-
void
glm_quat_mul
(versor p, versor q, versor dest)ΒΆ - multiplies two quaternion and stores result in destthis is also called Hamilton ProductAccording to WikiPedia:The product of two rotation quaternions [clarification needed] will be equivalent to the rotation q followed by the rotation p
- Parameters:
- [in] p quaternion 1 (first rotation)[in] q quaternion 2 (second rotation)[out] dest result quaternion
-
void
glm_quat_mat4
(versor q, mat4 dest)ΒΆ - convert quaternion to mat4
- Parameters:
- [in] q quaternion[out] dest result matrix
-
void
glm_quat_mat4t
(versor q, mat4 dest)ΒΆ - convert quaternion to mat4 (transposed). This is transposed version of glm_quat_mat4
- Parameters:
- [in] q quaternion[out] dest result matrix
-
void
glm_quat_mat3
(versor q, mat3 dest)ΒΆ - convert quaternion to mat3
- Parameters:
- [in] q quaternion[out] dest result matrix
-
void
glm_quat_mat3t
(versor q, mat3 dest)ΒΆ - convert quaternion to mat3 (transposed). This is transposed version of glm_quat_mat3
- Parameters:
- [in] q quaternion[out] dest result matrix
-
void
glm_quat_lerp
(versor from, versor to, float t, versor dest)ΒΆ - interpolates between two quaternionsusing spherical linear interpolation (LERP)
- Parameters:
- [in] from from[in] to to[in] t interpolant (amount) clamped between 0 and 1[out] dest result quaternion
-
void
glm_quat_nlerp
(versor q, versor r, float t, versor dest)ΒΆ - interpolates between two quaternionstaking the shortest rotation path usingnormalized linear interpolation (NLERP)This is a cheaper alternative to slerp; most games use nlerpfor animations as it visually makes little difference.
- References:
- Parameters:
- [in] from from[in] to to[in] t interpolant (amount) clamped between 0 and 1[out] dest result quaternion
-
void
glm_quat_slerp
(versor q, versor r, float t, versor dest)ΒΆ - interpolates between two quaternionsusing spherical linear interpolation (SLERP)
- Parameters:
- [in] from from[in] to to[in] t interpolant (amount) clamped between 0 and 1[out] dest result quaternion
-
void
glm_quat_look
(vec3 eye, versor ori, mat4 dest)ΒΆ - creates view matrix using quaternion as camera orientation
- Parameters:
- [in] eye eye[in] ori orientation in world space as quaternion[out] dest result matrix
-
void
glm_quat_for
(vec3 dir, vec3 up, versor dest)ΒΆ - creates look rotation quaternion
- Parameters:
- [in] dir direction to look[in] up up vector[out] dest result matrix
-
void
glm_quat_forp
(vec3 from, vec3 to, vec3 up, versor dest)ΒΆ - creates look rotation quaternion using source and destination positions p suffix stands for positionthis is similar to glm_quat_for except this computes direction for glm_quat_for for you.
- Parameters:
- [in] from source point[in] to destination point[in] up up vector[out] dest result matrix
-
void
glm_quat_rotatev
(versor q, vec3 v, vec3 dest)ΒΆ - crotate vector using using quaternion
- Parameters:
- [in] q quaternion[in] v vector to rotate[out] dest rotated vector
-
void
glm_quat_rotate
(mat4 m, versor q, mat4 dest)ΒΆ - rotate existing transform matrix using quaternion
instead of passing identity matrix, consider to use quat_mat4 functions
- Parameters:
- [in] m existing transform matrix to rotate[in] q quaternion[out] dest rotated matrix/transform
-
void
glm_quat_rotate_at
(mat4 m, versor q, vec3 pivot)ΒΆ - rotate existing transform matrix using quaternion at pivot point
- Parameters:
- [in, out] m existing transform matrix to rotate[in] q quaternion[in] pivot pivot
-
void
glm_quat_rotate_atm
(mat4 m, versor q, vec3 pivot)ΒΆ - rotate NEW transform matrix using quaternion at pivot pointthis creates rotation matrix, it assumes you donβt have a matrixthis should work faster than glm_quat_rotate_at because it reduces one glm_translate.
- Parameters:
- [in, out] m existing transform matrix to rotate[in] q quaternion[in] pivot pivot
-
void
glm_quat_make
(float * __restrict src, versor dest)ΒΆ Create quaternion from pointer
NOTE: @src must contain at least 4 elements. cglm store quaternions as [x, y, z, w].- Parameters:
- [in] src pointer to an array of floats[out] dest destination quaternion