mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
add documentation to quaternion header
This commit is contained in:
@@ -32,9 +32,27 @@
|
|||||||
# include "simd/sse2/quat.h"
|
# include "simd/sse2/quat.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GLM_QUAT_IDENTITY_INIT {1.0f, 0.0f, 0.0f, 0.0f}
|
/*
|
||||||
#define GLM_QUAT_IDENTITY (versor){1.0f, 0.0f, 0.0f, 0.0f}
|
* IMPORTANT! cglm stores quat as [w, x, y, z]
|
||||||
|
*
|
||||||
|
* Possible changes (these may be changed in the future):
|
||||||
|
* - versor is identity quat, we can define new type for quat.
|
||||||
|
* it can't be quat or quaternion becuase someone can use that name for
|
||||||
|
* variable name. maybe just vec4.
|
||||||
|
* - it stores [w, x, y, z] but it may change to [x, y, z, w] if we get enough
|
||||||
|
* feedback to change it.
|
||||||
|
* - in general we use last param as dest, but this header used first param
|
||||||
|
* as dest this may be changed but decided yet
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GLM_QUAT_IDENTITY_INIT {1.0f, 0.0f, 0.0f, 0.0f}
|
||||||
|
#define GLM_QUAT_IDENTITY (versor)GLM_QUAT_IDENTITY_INIT
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief makes given quat to identity
|
||||||
|
*
|
||||||
|
* @param[in, out] q quaternion
|
||||||
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_identity(versor q) {
|
glm_quat_identity(versor q) {
|
||||||
@@ -42,6 +60,15 @@ glm_quat_identity(versor q) {
|
|||||||
glm_vec4_copy(v, q);
|
glm_vec4_copy(v, q);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion with individual axis components
|
||||||
|
*
|
||||||
|
* @param[out] q quaternion
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] x axis.x
|
||||||
|
* @param[in] y axis.y
|
||||||
|
* @param[in] z axis.z
|
||||||
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat(versor q,
|
glm_quat(versor q,
|
||||||
@@ -61,6 +88,13 @@ glm_quat(versor q,
|
|||||||
q[3] = s * z;
|
q[3] = s * z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief creates NEW quaternion with axis vector
|
||||||
|
*
|
||||||
|
* @param[out] q quaternion
|
||||||
|
* @param[in] angle angle (radians)
|
||||||
|
* @param[in] v axis
|
||||||
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quatv(versor q,
|
glm_quatv(versor q,
|
||||||
@@ -78,12 +112,22 @@ glm_quatv(versor q,
|
|||||||
q[3] = s * v[2];
|
q[3] = s * v[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief returns norm (magnitude) of quaternion
|
||||||
|
*
|
||||||
|
* @param[out] q quaternion
|
||||||
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_quat_norm(versor q) {
|
glm_quat_norm(versor q) {
|
||||||
return glm_vec4_norm(q);
|
return glm_vec4_norm(q);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief normalize quaternion
|
||||||
|
*
|
||||||
|
* @param[in, out] m quaternion
|
||||||
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_normalize(versor q) {
|
glm_quat_normalize(versor q) {
|
||||||
@@ -98,12 +142,25 @@ glm_quat_normalize(versor q) {
|
|||||||
glm_vec4_scale(q, 1.0f / sqrtf(sum), q);
|
glm_vec4_scale(q, 1.0f / sqrtf(sum), q);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief dot product of two quaternion
|
||||||
|
*
|
||||||
|
* @param[in] m quaternion 1
|
||||||
|
* @param[in] r quaternion 2
|
||||||
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
float
|
float
|
||||||
glm_quat_dot(versor q, versor r) {
|
glm_quat_dot(versor q, versor r) {
|
||||||
return glm_vec4_dot(q, r);
|
return glm_vec4_dot(q, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiplies two quaternion and stores result in dest
|
||||||
|
*
|
||||||
|
* @param[in] q1 quaternion 1
|
||||||
|
* @param[in] q2 quaternion 2
|
||||||
|
* @param[out] dest result quaternion
|
||||||
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_mulv(versor q1, versor q2, versor dest) {
|
glm_quat_mulv(versor q1, versor q2, versor dest) {
|
||||||
@@ -115,6 +172,12 @@ glm_quat_mulv(versor q1, versor q2, versor dest) {
|
|||||||
glm_quat_normalize(dest);
|
glm_quat_normalize(dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief convert quaternion to mat4
|
||||||
|
*
|
||||||
|
* @param[in] q quaternion
|
||||||
|
* @param[out] dest result matrix
|
||||||
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_mat4(versor q, mat4 dest) {
|
glm_quat_mat4(versor q, mat4 dest) {
|
||||||
@@ -153,6 +216,15 @@ glm_quat_mat4(versor q, mat4 dest) {
|
|||||||
dest[3][3] = 1.0f;
|
dest[3][3] = 1.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief interpolates between two quaternions
|
||||||
|
* using spherical linear interpolation (SLERP)
|
||||||
|
*
|
||||||
|
* @param[in] q from
|
||||||
|
* @param[in] r to
|
||||||
|
* @param[in] t amout
|
||||||
|
* @param[out] dest result quaternion
|
||||||
|
*/
|
||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_quat_slerp(versor q,
|
glm_quat_slerp(versor q,
|
||||||
|
|||||||
Reference in New Issue
Block a user