Skip to content

Commit

Permalink
Merge pull request #321 from EasyIP2023/feature/glm_quat
Browse files Browse the repository at this point in the history
quat: add new function glm_quat_make
  • Loading branch information
recp committed Jun 30, 2023
2 parents 6d39ef0 + bfe5ea6 commit 49dd24e
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 0 deletions.
11 changes: 11 additions & 0 deletions docs/source/quat.rst
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ Functions:
#. :c:func:`glm_quat_rotate`
#. :c:func:`glm_quat_rotate_at`
#. :c:func:`glm_quat_rotate_atm`
#. :c:func:`glm_quat_make`

Functions documentation
~~~~~~~~~~~~~~~~~~~~~~~
Expand Down Expand Up @@ -420,3 +421,13 @@ Functions documentation
| *[in, out]* **m** existing transform matrix to rotate
| *[in]* **q** quaternion
| *[in]* **pivot** pivot
.. c:function:: void glm_quat_make(float * __restrict src, versor dest)
Create quaternion from pointer
| NOTE: **@src** must contain 4 elements. cglm store quaternions as [x, y, z, w].
Parameters:
| *[in]* **src** pointer to an array of floats
| *[out]* **dest** destination quaternion
4 changes: 4 additions & 0 deletions include/cglm/call/quat.h
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,10 @@ CGLM_EXPORT
void
glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot);

CGLM_EXPORT
void
glmc_quat_make(float * __restrict src, versor dest);

#ifdef __cplusplus
}
#endif
Expand Down
14 changes: 14 additions & 0 deletions include/cglm/quat.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
versor dest);
CGLM_INLINE void glm_quat_rotatev(versor q, vec3 v, vec3 dest);
CGLM_INLINE void glm_quat_rotate(mat4 m, versor q, mat4 dest);
CGLM_INLINE void glm_quat_make(float * restrict src, versor dest);
*/

#ifndef cglm_quat_h
Expand Down Expand Up @@ -885,4 +886,17 @@ glm_quat_rotate_atm(mat4 m, versor q, vec3 pivot) {
glm_translate(m, pivotInv);
}

/*!
* @brief Create quaternion from pointer
*
* @param[in] src pointer to an array of floats
* @param[out] dest quaternion
*/
CGLM_INLINE
void
glm_quat_make(float * __restrict src, versor dest) {
dest[0] = src[0]; dest[1] = src[1];
dest[2] = src[2]; dest[3] = src[3];
}

#endif /* cglm_quat_h */
15 changes: 15 additions & 0 deletions include/cglm/struct/quat.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
CGLM_INLINE mat4s glms_quat_rotate(mat4s m, versors q)
CGLM_INLINE mat4s glms_quat_rotate_at(mat4s m, versors q, vec3s pivot)
CGLM_INLINE mat4s glms_quat_rotate_atm(versors q, vec3s pivot)
CGLM_INLINE void glms_quat_make(float * restrict src)
*/

#ifndef cglms_quat_h
Expand Down Expand Up @@ -565,4 +566,18 @@ glms_quat_(rotate_atm)(versors q, vec3s pivot) {
return dest;
}

/*!
* @brief Create CGLM quaternion from pointer
*
* @param[in] src pointer to an array of floats
* @returns constructed quaternion from raw pointer
*/
CGLM_INLINE
versors
glms_quat_(make)(float * __restrict src) {
versors dest;
glm_quat_make(src, dest.raw);
return dest;
}

#endif /* cglms_quat_h */
6 changes: 6 additions & 0 deletions src/quat.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,3 +229,9 @@ void
glmc_quat_rotate_atm(mat4 m, versor q, vec3 pivot) {
glm_quat_rotate_atm(m, q, pivot);
}

CGLM_EXPORT
void
glmc_quat_make(float * __restrict src, versor dest) {
glm_quat_make(src, dest);
}
12 changes: 12 additions & 0 deletions test/src/test_quat.h
Original file line number Diff line number Diff line change
Expand Up @@ -1084,3 +1084,15 @@ TEST_IMPL(GLM_PREFIX, quat_rotate_atm) {

TEST_SUCCESS
}

TEST_IMPL(GLM_PREFIX, quat_make) {
versor dest;
float src[4] = {7.2f, 1.0f, 2.5f, 6.1f};

GLM(quat_make)(src, dest);
for (unsigned int i = 0; i < sizeof(src) / sizeof(float); i++) {
ASSERT(test_eq(src[i], dest[i]));
}

TEST_SUCCESS
}
4 changes: 4 additions & 0 deletions test/tests.h
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@ TEST_DECLARE(glm_quat_rotate)
TEST_DECLARE(glm_quat_rotate_at)
TEST_DECLARE(glm_quat_rotate_atm)
TEST_DECLARE(glm_quat_from_vecs)
TEST_DECLARE(glm_quat_make)

TEST_DECLARE(glmc_quat_identity)
TEST_DECLARE(glmc_quat_identity_array)
Expand Down Expand Up @@ -349,6 +350,7 @@ TEST_DECLARE(glmc_quat_rotate)
TEST_DECLARE(glmc_quat_rotate_at)
TEST_DECLARE(glmc_quat_rotate_atm)
TEST_DECLARE(glmc_quat_from_vecs)
TEST_DECLARE(glmc_quat_make)

/* bezier */
TEST_DECLARE(bezier)
Expand Down Expand Up @@ -1158,6 +1160,7 @@ TEST_LIST {
TEST_ENTRY(glm_quat_rotate_at)
TEST_ENTRY(glm_quat_rotate_atm)
TEST_ENTRY(glm_quat_from_vecs)
TEST_ENTRY(glm_quat_make)

TEST_ENTRY(glmc_quat_identity)
TEST_ENTRY(glmc_quat_identity_array)
Expand Down Expand Up @@ -1196,6 +1199,7 @@ TEST_LIST {
TEST_ENTRY(glmc_quat_rotate_at)
TEST_ENTRY(glmc_quat_rotate_atm)
TEST_ENTRY(glmc_quat_from_vecs)
TEST_ENTRY(glmc_quat_make)

/* bezier */
TEST_ENTRY(bezier)
Expand Down

0 comments on commit 49dd24e

Please sign in to comment.