From eaf45e489d94d19678d56554d3fec6ed0ded1c31 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Sun, 31 Dec 2017 17:17:39 +0300 Subject: [PATCH] view frustum center --- include/cglm/call/cam.h | 4 ++++ include/cglm/cam.h | 23 +++++++++++++++++++++++ src/cam.c | 6 ++++++ 3 files changed, 33 insertions(+) diff --git a/include/cglm/call/cam.h b/include/cglm/call/cam.h index 2a7d661..7b2c409 100644 --- a/include/cglm/call/cam.h +++ b/include/cglm/call/cam.h @@ -56,6 +56,10 @@ CGLM_EXPORT void glmc_frustum_corners(mat4 invMat, vec4 dest[8]); +CGLM_EXPORT +void +glmc_frustum_center(vec4 corners[8], vec4 dest); + #ifdef __cplusplus } #endif diff --git a/include/cglm/cam.h b/include/cglm/cam.h index 41a2c4b..e8c4afb 100644 --- a/include/cglm/cam.h +++ b/include/cglm/cam.h @@ -503,4 +503,27 @@ glm_frustum_corners(mat4 invMat, vec4 dest[8]) { glm_vec4_scale(dest[7], 1.0f / dest[7][3], dest[7]); } +/*! + * @brief finds center of view frustum + * + * @param[in] corners view frustum corners + * @param[out] dest view frustum center + */ +CGLM_INLINE +void +glm_frustum_center(vec4 corners[8], vec4 dest) { + glm_vec4_broadcast(0.0f, dest); + + glm_vec4_add(corners[0], dest, dest); + glm_vec4_add(corners[1], dest, dest); + glm_vec4_add(corners[2], dest, dest); + glm_vec4_add(corners[3], dest, dest); + glm_vec4_add(corners[4], dest, dest); + glm_vec4_add(corners[5], dest, dest); + glm_vec4_add(corners[6], dest, dest); + glm_vec4_add(corners[7], dest, dest); + + glm_vec4_scale(dest, 0.125f, dest); +} + #endif /* cglm_vcam_h */ diff --git a/src/cam.c b/src/cam.c index f588619..602b1fc 100644 --- a/src/cam.c +++ b/src/cam.c @@ -78,3 +78,9 @@ void glmc_frustum_corners(mat4 invMat, vec4 dest[8]) { glm_frustum_corners(invMat, dest); } + +CGLM_EXPORT +void +glmc_frustum_center(vec4 corners[8], vec4 dest) { + glm_frustum_center(corners, dest); +}