From 2e8162b1336a3d33d9793d2fe17e2d1d3e88d68f Mon Sep 17 00:00:00 2001 From: Sundaram Ramaswamy Date: Wed, 9 Jun 2021 23:11:19 +0530 Subject: [PATCH 1/3] Fix vec3_ortho --- docs/source/vec3.rst | 3 +++ include/cglm/vec3.h | 7 ++++--- test/runner.c | 12 +++++------- test/src/test_vec3.h | 12 ++++++++++-- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/docs/source/vec3.rst b/docs/source/vec3.rst index b006833..17e4824 100644 --- a/docs/source/vec3.rst +++ b/docs/source/vec3.rst @@ -474,6 +474,9 @@ Functions documentation possible orthogonal/perpendicular vector + References: + * `On picking an orthogonal vector (and combing coconuts) `_ + Parameters: | *[in]* **v** vector | *[out]* **dest** orthogonal/perpendicular vector diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index 7abeaf5..8fc616f 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -807,9 +807,10 @@ glm_vec3_minv(vec3 a, vec3 b, vec3 dest) { CGLM_INLINE void glm_vec3_ortho(vec3 v, vec3 dest) { - dest[0] = v[1] - v[2]; - dest[1] = v[2] - v[0]; - dest[2] = v[0] - v[1]; + float ignore; + float f = modff(fabsf(v[0]) + 0.5f, &ignore); + vec3 result = {-v[1], v[0] - f * v[2], f * v[1]}; + glm_vec3_copy(result, dest); } /*! diff --git a/test/runner.c b/test/runner.c index fae37e6..e74d5e7 100644 --- a/test/runner.c +++ b/test/runner.c @@ -79,22 +79,20 @@ main(int argc, const char * argv[]) { if (failed == 0) { fprintf(stderr, - BOLDGREEN "\n All tests are passed " FINAL_TEXT "\n" RESET); + BOLDGREEN "\n All tests passed " FINAL_TEXT "\n" RESET); } fprintf(stderr, CYAN "\ncglm test results (%0.2fs):\n" RESET "--------------------------\n" - MAGENTA "%d" RESET " tests are runned, " - GREEN "%d" RESET " %s passed, " - RED "%d" RESET " %s failed\n\n" RESET, + MAGENTA "%d" RESET " tests ran, " + GREEN "%d" RESET " passed, " + RED "%d" RESET " failed\n\n" RESET, total, count, passed, - passed > 1 ? "are" : "is", - failed, - failed > 1 ? "are" : "is"); + failed); return failed; } diff --git a/test/src/test_vec3.h b/test/src/test_vec3.h index 4fa1d25..064d340 100644 --- a/test/src/test_vec3.h +++ b/test/src/test_vec3.h @@ -1123,8 +1123,8 @@ TEST_IMPL(GLM_PREFIX, vec3_minv) { } TEST_IMPL(GLM_PREFIX, vec3_ortho) { - vec3 v1, v2, v3; - vec3 v5, v6, v7; + vec3 v1, v2, v3, v4 = {1.f, 1.f, 1.f}; + vec3 v5, v6, v7, v8; float a; test_rand_vec3(v1); @@ -1134,6 +1134,7 @@ TEST_IMPL(GLM_PREFIX, vec3_ortho) { GLM(vec3_ortho)(v1, v5); GLM(vec3_ortho)(v2, v6); GLM(vec3_ortho)(v3, v7); + GLM(vec3_ortho)(v4, v8); a = glm_vec3_angle(v1, v5); ASSERT(!isinf(a)) @@ -1150,6 +1151,13 @@ TEST_IMPL(GLM_PREFIX, vec3_ortho) { ASSERT(!isnan(a)) ASSERT(test_eq(a, GLM_PI_2f)) + a = glm_vec3_angle(v4, v8); + printf("(%f, %f, %f)\n", v4[0], v4[1], v4[2]); + printf("(%f, %f, %f)\n", v8[0], v8[1], v8[2]); + ASSERT(!isinf(a)) + ASSERT(!isnan(a)) + ASSERT(test_eq(a, GLM_PI_2f)) + TEST_SUCCESS } From c330b47ded4e35281c4beede45c8de60528c7845 Mon Sep 17 00:00:00 2001 From: Sundaram Ramaswamy Date: Thu, 10 Jun 2021 10:27:28 +0530 Subject: [PATCH 2/3] Remove debug printf statements --- test/src/test_vec3.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/src/test_vec3.h b/test/src/test_vec3.h index 064d340..44a9847 100644 --- a/test/src/test_vec3.h +++ b/test/src/test_vec3.h @@ -1152,8 +1152,6 @@ TEST_IMPL(GLM_PREFIX, vec3_ortho) { ASSERT(test_eq(a, GLM_PI_2f)) a = glm_vec3_angle(v4, v8); - printf("(%f, %f, %f)\n", v4[0], v4[1], v4[2]); - printf("(%f, %f, %f)\n", v8[0], v8[1], v8[2]); ASSERT(!isinf(a)) ASSERT(!isnan(a)) ASSERT(test_eq(a, GLM_PI_2f)) From 38c6188e12b006f955ba2431b0dc71a36bd7b9fb Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Thu, 10 Jun 2021 10:13:51 +0300 Subject: [PATCH 3/3] Update vec3.h --- include/cglm/vec3.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/cglm/vec3.h b/include/cglm/vec3.h index 8fc616f..5fa6e5f 100644 --- a/include/cglm/vec3.h +++ b/include/cglm/vec3.h @@ -808,8 +808,8 @@ CGLM_INLINE void glm_vec3_ortho(vec3 v, vec3 dest) { float ignore; - float f = modff(fabsf(v[0]) + 0.5f, &ignore); - vec3 result = {-v[1], v[0] - f * v[2], f * v[1]}; + float f = modff(fabsf(v[0]) + 0.5f, &ignore); + vec3 result = {-v[1], v[0] - f * v[2], f * v[1]}; glm_vec3_copy(result, dest); }