summaryrefslogtreecommitdiff
path: root/src/glm_mat4_bindings.c
diff options
context:
space:
mode:
authorsanine-a <sanine.not@pm.me>2020-11-29 22:38:45 -0600
committersanine-a <sanine.not@pm.me>2020-11-29 22:38:45 -0600
commit306e6cca8e49638779b111d66852877416971a59 (patch)
tree0faaf9087b9acaa8a74ff2716ad2b406e4dfc526 /src/glm_mat4_bindings.c
parent8a75194c51a189f9c8f72d9821beb00b7f75d06d (diff)
add camera functions and fix bug in argument parsing
Diffstat (limited to 'src/glm_mat4_bindings.c')
-rw-r--r--src/glm_mat4_bindings.c98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/glm_mat4_bindings.c b/src/glm_mat4_bindings.c
index f10f954..460cde2 100644
--- a/src/glm_mat4_bindings.c
+++ b/src/glm_mat4_bindings.c
@@ -397,3 +397,101 @@ int honey_glm_rotate(lua_State* L)
return 0;
}
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+ * Camera functions
+ *
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+int honey_glm_perspective(lua_State* L)
+{
+ honey_glm_array *self;
+ float fov, aspect, near, far;
+ honey_lua_parse_arguments
+ (L, 1, 5,
+ HONEY_USERDATA, &self,
+ HONEY_NUMBER, &fov, HONEY_NUMBER, &aspect,
+ HONEY_NUMBER, &near, HONEY_NUMBER, &far);
+
+ glm_perspective(fov, aspect, near, far, self->data);
+ return 0;
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+int honey_glm_perspective_resize(lua_State* L)
+{
+ honey_glm_array *self;
+ float new_aspect;
+ honey_lua_parse_arguments
+ (L, 1, 2, HONEY_USERDATA, &self, HONEY_NUMBER, new_aspect);
+
+ glm_perspective_resize(new_aspect, self->data);
+ return 0;
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+int honey_glm_lookat(lua_State* L)
+{
+ honey_glm_array *self, *eye, *center, *up;
+ honey_lua_parse_arguments
+ (L, 1, 4,
+ HONEY_USERDATA, &self,
+ HONEY_USERDATA, &eye,
+ HONEY_USERDATA, &center,
+ HONEY_USERDATA, &up);
+
+ if (eye->type != VEC3)
+ honey_lua_throw_error
+ (L, "eye vector must be of type VEC3 (%d); got %d instead",
+ VEC3, eye->type);
+
+ if (center->type != VEC3)
+ honey_lua_throw_error
+ (L, "center vector must be of type VEC3 (%d); got %d instead",
+ VEC3, center->type);
+
+ if (up->type != VEC3)
+ honey_lua_throw_error
+ (L, "up vector must be of type VEC3 (%d); got %d instead",
+ VEC3, up->type);
+
+ glm_lookat(eye->data, center->data, up->data, self->data);
+ return 0;
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+int honey_glm_look(lua_State* L)
+{
+ honey_glm_array *self, *eye, *dir, *up;
+ honey_lua_parse_arguments
+ (L, 1, 4,
+ HONEY_USERDATA, &self,
+ HONEY_USERDATA, &eye,
+ HONEY_USERDATA, &dir,
+ HONEY_USERDATA, &up);
+
+ if (eye->type != VEC3)
+ honey_lua_throw_error
+ (L, "eye vector must be of type VEC3 (%d); got %d instead",
+ VEC3, eye->type);
+
+ if (dir->type != VEC3)
+ honey_lua_throw_error
+ (L, "direction vector must be of type VEC3 (%d); got %d instead",
+ VEC3, dir->type);
+
+ if (up->type != VEC3)
+ honey_lua_throw_error
+ (L, "up vector must be of type VEC3 (%d); got %d instead",
+ VEC3, up->type);
+
+ glm_look(eye->data, dir->data, up->data, self->data);
+ return 0;
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+