summaryrefslogtreecommitdiff
path: root/include/cglm/struct/affine-mat.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/cglm/struct/affine-mat.h')
-rw-r--r--include/cglm/struct/affine-mat.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/include/cglm/struct/affine-mat.h b/include/cglm/struct/affine-mat.h
new file mode 100644
index 0000000..e1d4ff3
--- /dev/null
+++ b/include/cglm/struct/affine-mat.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c), Recep Aslantas.
+ *
+ * MIT License (MIT), http://opensource.org/licenses/MIT
+ * Full license can be found in the LICENSE file
+ */
+
+/*
+ Functions:
+ CGLM_INLINE mat4s glms_mul(mat4 m1, mat4 m2);
+ CGLM_INLINE mat4s glms_mul_rot(mat4 m1, mat4 m2);
+ CGLM_INLINE mat4s glms_inv_tr();
+ */
+
+#ifndef cglms_affine_mat_h
+#define cglms_affine_mat_h
+
+#include "../common.h"
+#include "../types-struct.h"
+#include "../affine-mat.h"
+#include "vec3.h"
+#include "vec4.h"
+#include "mat4.h"
+
+/*!
+ * @brief this is similar to glms_mat4_mul but specialized to affine transform
+ *
+ * Matrix format should be:
+ * R R R X
+ * R R R Y
+ * R R R Z
+ * 0 0 0 W
+ *
+ * this reduces some multiplications. It should be faster than mat4_mul.
+ * if you are not sure about matrix format then DON'T use this! use mat4_mul
+ *
+ * @param[in] m1 affine matrix 1
+ * @param[in] m2 affine matrix 2
+ * @returns destination matrix
+ */
+CGLM_INLINE
+mat4s
+glms_mul(mat4s m1, mat4s m2){
+ mat4s r;
+ glm_mul(m1.raw, m2.raw, r.raw);
+ return r;
+}
+
+/*!
+ * @brief this is similar to glm_mat4_mul but specialized to affine transform
+ *
+ * Right Matrix format should be:
+ * R R R 0
+ * R R R 0
+ * R R R 0
+ * 0 0 0 1
+ *
+ * this reduces some multiplications. It should be faster than mat4_mul.
+ * if you are not sure about matrix format then DON'T use this! use mat4_mul
+ *
+ * @param[in] m1 affine matrix 1
+ * @param[in] m2 affine matrix 2
+ * @returns destination matrix
+ */
+CGLM_INLINE
+mat4s
+glms_mul_rot(mat4s m1, mat4s m2){
+ mat4s r;
+ glm_mul_rot(m1.raw, m2.raw, r.raw);
+ return r;
+}
+
+/*!
+ * @brief inverse orthonormal rotation + translation matrix (ridig-body)
+ *
+ * @code
+ * X = | R T | X' = | R' -R'T |
+ * | 0 1 | | 0 1 |
+ * @endcode
+ *
+ * @param[in] m matrix
+ * @returns destination matrix
+ */
+CGLM_INLINE
+mat4s
+glms_inv_tr(mat4s m){
+ glm_inv_tr(m.raw);
+ return m;
+}
+#endif /* cglms_affine_mat_h */