aboutsummaryrefslogtreecommitdiff
path: root/src/center.c
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-05-13 11:48:22 +0200
committerCharles <sircharlesaze@gmail.com>2020-05-13 11:48:22 +0200
commit5635d61927b2fc864d92f9f7b40cdb164eeab275 (patch)
tree5a9fa7c0cd9a4e662b0ad63d87143890880af173 /src/center.c
parent723c4602c6ec9b74e841501754e651ef359f6385 (diff)
downloadscop-5635d61927b2fc864d92f9f7b40cdb164eeab275.tar.gz
scop-5635d61927b2fc864d92f9f7b40cdb164eeab275.tar.bz2
scop-5635d61927b2fc864d92f9f7b40cdb164eeab275.zip
Added model center translation
Diffstat (limited to 'src/center.c')
-rw-r--r--src/center.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/center.c b/src/center.c
new file mode 100644
index 0000000..b15811d
--- /dev/null
+++ b/src/center.c
@@ -0,0 +1,52 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* center.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/05/13 10:48:15 by charles #+# #+# */
+/* Updated: 2020/05/13 11:32:45 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "scop.h"
+
+void st_find_boundary(float *vertices, size_t vertices_len, t_ftmvec3 *min, t_ftmvec3 *max)
+{
+ size_t i;
+
+ ftm_vec3init(min, INFINITY, INFINITY, INFINITY);
+ ftm_vec3init(max, -INFINITY, -INFINITY, -INFINITY);
+ i = 0;
+ while (i < vertices_len)
+ {
+ if (vertices[i] > max->x)
+ max->x = vertices[i];
+ if (vertices[i] < min->x)
+ min->x = vertices[i];
+ i++;
+ if (vertices[i] > max->y)
+ max->y = vertices[i];
+ if (vertices[i] < min->y)
+ min->y = vertices[i];
+ i++;
+ if (vertices[i] > max->z)
+ max->z = vertices[i];
+ if (vertices[i] < min->z)
+ min->z = vertices[i];
+ i += 2;
+ }
+}
+
+void center_mat4_init_translate(t_ftmmat4 *dst, float *vertices, size_t vertices_len)
+{
+ t_ftmvec3 min;
+ t_ftmvec3 max;
+
+ st_find_boundary(vertices, vertices_len, &min, &max);
+ ftm_mat4init_eye(dst, 1.0);
+ ftm_mat4translate(dst, -(max.x + min.x) / 2.0f,
+ -(max.y + min.y) / 2.0f,
+ -(max.z + min.z) / 2.0f);
+}