From 9fe48b34a7cdccda1220f1ebdcafbcad8216bd72 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Fri, 27 Oct 2017 00:20:41 +0300 Subject: [PATCH] inverse (opposite) of vectors --- include/cglm/call/vec3.h | 8 ++++++++ include/cglm/call/vec4.h | 8 ++++++++ include/cglm/vec3.h | 26 ++++++++++++++++++++++++++ include/cglm/vec4.h | 26 ++++++++++++++++++++++++++ src/vec3.c | 12 ++++++++++++ src/vec4.c | 12 ++++++++++++ 6 files changed, 92 insertions(+) diff --git a/include/cglm/call/vec3.h b/include/cglm/call/vec3.h index 104259f..0a8901e 100644 --- a/include/cglm/call/vec3.h +++ b/include/cglm/call/vec3.h @@ -64,6 +64,14 @@ CGLM_EXPORT void glmc_vec_flipsign(vec3 v); +CGLM_EXPORT +void +glmc_vec_inv(vec3 v); + +CGLM_EXPORT +void +glmc_vec_inv_to(vec3 v, vec3 dest); + CGLM_EXPORT float glmc_vec_angle(vec3 v1, vec3 v2); diff --git a/include/cglm/call/vec4.h b/include/cglm/call/vec4.h index dfb94a9..3b0b95e 100644 --- a/include/cglm/call/vec4.h +++ b/include/cglm/call/vec4.h @@ -65,6 +65,14 @@ CGLM_EXPORT void glmc_vec4_flipsign(vec4 v); +CGLM_EXPORT +void +glmc_vec4_inv(vec4 v); + +CGLM_EXPORT +void +glmc_vec4_inv_to(vec4 v, vec4 dest); + CGLM_EXPORT float glmc_vec4_distance(vec4 v1, vec4 v2); diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index a64afd6..a87220d 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -25,6 +25,8 @@ CGLM_INLINE void glm_vec_scale(vec3 v, float s, vec3 dest); CGLM_INLINE void glm_vec_scale_as(vec3 v, float s, vec3 dest); CGLM_INLINE void glm_vec_flipsign(vec3 v); + CGLM_INLINE void glm_vec_inv(vec3 v); + CGLM_INLINE void glm_vec_inv_to(vec3 v, vec3 dest); CGLM_INLINE void glm_vec_normalize(vec3 v); CGLM_INLINE void glm_vec_normalize_to(vec3 vec, vec3 dest); CGLM_INLINE float glm_vec_distance(vec3 v1, vec3 v2); @@ -198,6 +200,30 @@ glm_vec_flipsign(vec3 v) { v[2] = -v[2]; } +/*! + * @brief make vector as inverse/opposite of itself + * + * @param[in, out] v vector + */ +CGLM_INLINE +void +glm_vec_inv(vec3 v) { + glm_vec_flipsign(v); +} + +/*! + * @brief inverse/opposite vector + * + * @param[in] vec source + * @param[out] dest destination + */ +CGLM_INLINE +void +glm_vec_inv_to(vec3 v, vec3 dest) { + glm_vec_copy(v, dest); + glm_vec_flipsign(dest); +} + /*! * @brief normalize vec3 and store result in same vec * diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index a883922..f39b17b 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -26,6 +26,8 @@ CGLM_INLINE void glm_vec4_scale(vec4 v, float s, vec4 dest); CGLM_INLINE void glm_vec4_scale_as(vec4 v, float s, vec4 dest); CGLM_INLINE void glm_vec4_flipsign(vec4 v); + CGLM_INLINE void glm_vec4_inv(vec4 v); + CGLM_INLINE void glm_vec4_inv_to(vec4 v, vec4 dest); CGLM_INLINE void glm_vec4_normalize(vec4 v); CGLM_INLINE void glm_vec4_normalize_to(vec4 vec, vec4 dest); CGLM_INLINE float glm_vec4_distance(vec4 v1, vec4 v2); @@ -225,6 +227,30 @@ glm_vec4_flipsign(vec4 v) { #endif } +/*! + * @brief make vector as inverse/opposite of itself + * + * @param[in, out] v vector + */ +CGLM_INLINE +void +glm_vec4_inv(vec4 v) { + glm_vec4_flipsign(v); +} + +/*! + * @brief inverse/opposite vector + * + * @param[in] vec source + * @param[out] dest destination + */ +CGLM_INLINE +void +glm_vec4_inv_to(vec4 v, vec4 dest) { + glm_vec4_copy(v, dest); + glm_vec4_flipsign(dest); +} + /*! * @brief normalize vec4 and store result in same vec * diff --git a/src/vec3.c b/src/vec3.c index 09f05a1..1b617b7 100644 --- a/src/vec3.c +++ b/src/vec3.c @@ -80,6 +80,18 @@ glmc_vec_flipsign(vec3 v) { glm_vec_flipsign(v); } +CGLM_EXPORT +void +glmc_vec_inv(vec3 v) { + glm_vec_inv(v); +} + +CGLM_EXPORT +void +glmc_vec_inv_to(vec3 v, vec3 dest) { + glm_vec_inv_to(v, dest); +} + CGLM_EXPORT float glmc_vec_angle(vec3 v1, vec3 v2) { diff --git a/src/vec4.c b/src/vec4.c index 7d72d83..4d1624a 100644 --- a/src/vec4.c +++ b/src/vec4.c @@ -80,6 +80,18 @@ glmc_vec4_flipsign(vec4 v) { glm_vec4_flipsign(v); } +CGLM_EXPORT +void +glmc_vec4_inv(vec4 v) { + glm_vec4_inv(v); +} + +CGLM_EXPORT +void +glmc_vec4_inv_to(vec4 v, vec4 dest) { + glm_vec4_inv_to(v, dest); +} + CGLM_EXPORT float glmc_vec4_distance(vec4 v1, vec4 v2) {