From 33b36d26e5d3e3014830fc935ef41d87da9177dd Mon Sep 17 00:00:00 2001 From: luc Date: Thu, 19 Apr 2018 03:35:29 +0200 Subject: [PATCH] new function to test --- sweet_math.h | 4 ++++ sweet_matrix.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ sweet_matrix.h | 8 +++++++ 3 files changed, 72 insertions(+) diff --git a/sweet_math.h b/sweet_math.h index 1031ce3..1679de9 100644 --- a/sweet_math.h +++ b/sweet_math.h @@ -35,6 +35,7 @@ #define SWEET_PI 3.141592653589793238462643 #define SWEET_2PI 6.283185307179586476925286 #define SWEET_GOLDEN_RATIO 1.618033988749894848204586 +#define SWEET_EPSILON 0.00000001 /** RadianToDegree */ /** @param Radian as float or double */ @@ -51,6 +52,9 @@ #define sweet_math_approx_equals(a, b, epsilon) \ (a <= (b+epsilon) && a >= (b-epsilon)) +#define sweet_math_approx_zero(a, epsilon) \ + (a <= (epsilon) && a >= (epsilon)) + /** Invsqrt */ /** @param x argument of square root as float */ /** @return 1 over square root as float */ diff --git a/sweet_matrix.c b/sweet_matrix.c index a39911c..37cf020 100644 --- a/sweet_matrix.c +++ b/sweet_matrix.c @@ -149,6 +149,66 @@ sweet_matrix_identity4 (void) return m; } + +mat2 +sweet_matrix_ortho_transform2 (vec2 u, vec2 v) +{ + mat2 m; + m.v[0] = u.x; + m.v[3] = v.x; + + m.v[2] = u.y; + m.v[3] = v.y; + + return m; +} + +mat3 +sweet_matrix_ortho_transform3 (vec3 u, vec3 v, vec3 w) +{ + mat3 m; + m.v[0] = u.x; + m.v[1] = v.x; + m.v[2] = w.x; + + m.v[3] = u.y; + m.v[4] = v.y; + m.v[5] = w.y; + + m.v[6] = u.z; + m.v[7] = v.z; + m.v[8] = w.z; + + return m; +} + +mat4 +sweet_matrix_ortho_transform4 (vec4 u, vec4 v, vec4 w, vec4 t) +{ + mat4 m; + m.v[0] = u.x; + m.v[1] = v.y; + m.v[2] = w.z; + m.v[3] = t.w; + + m.v[4] = u.x; + m.v[5] = v.y; + m.v[6] = w.z; + m.v[7] = t.w; + + m.v[8] = u.x; + m.v[9] = v.y; + m.v[10] = w.z; + m.v[11] = t.w; + + m.v[12] = u.x; + m.v[13] = v.y; + m.v[14] = w.z; + m.v[15] = t.w; + + return m; +} + mat4 sweet_matrix_perspective (double fovy, double aspect, double z_near, double z_far) { diff --git a/sweet_matrix.h b/sweet_matrix.h index 45555c4..79d4165 100644 --- a/sweet_matrix.h +++ b/sweet_matrix.h @@ -35,6 +35,14 @@ mat2 sweet_matrix_identity2 (void); mat3 sweet_matrix_identity3 (void); mat4 sweet_matrix_identity4 (void); +/** Basis */ +/** Vectors must be orthogonal */ +/** @param u, v, w, t as vector of the new basis */ +/** @return transform matrix to the new basis */ +mat2 sweet_matrix_ortho_basis2 (vec2 u, vec2 v); +mat3 sweet_matrix_ortho_basis3 (vec3 u, vec3 v, vec3 w); +mat4 sweet_matrix_ortho_basis4 (vec4 u, vec4 v, vec4 w, vec4 t); + /** Frustum */ /** @param Right as flaot */ /** @param Left as float */