diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-05-12 19:11:40 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-05-12 19:11:40 +0200 |
| commit | 723c4602c6ec9b74e841501754e651ef359f6385 (patch) | |
| tree | d6dd27c251871fb61e3fc99fe7a0a96438096f1d /src/main.c | |
| parent | 7b214503608550dc2853b9e01526723f8c65baf3 (diff) | |
| download | scop-723c4602c6ec9b74e841501754e651ef359f6385.tar.gz scop-723c4602c6ec9b74e841501754e651ef359f6385.tar.bz2 scop-723c4602c6ec9b74e841501754e651ef359f6385.zip | |
Added perspective matrix
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 142 |
1 files changed, 88 insertions, 54 deletions
@@ -6,73 +6,97 @@ /* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/05/09 10:20:09 by charles #+# #+# */ -/* Updated: 2020/05/12 14:10:09 by charles ### ########.fr */ +/* Updated: 2020/05/12 19:08:00 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "scop.h" +void debugmat(t_ftmmat4 *mat) +{ + for (int i = 0; i < 4; i++) + { + for (int j = 0; j < 4; j++) + { + printf("%f, ", mat->m[i * 4 + j]); + } + printf("\n"); + } + printf("\n"); +} + +extern bool g_window_resized; + int main(int argc, char **argv) { GLFWwindow *window; t_object object; t_gl_state state; - /* if (argc != 2) */ - /* { */ - /* ft_putstr("Usage: "); */ - /* ft_putstr(argv[0]); */ - /* ft_putendl(" [obj file]"); */ - /* return (1); */ - /* } */ - /* if (parse(argv[1], &object) == -1) */ - /* { */ - /* ft_putstr("Error: couldn't parse "); */ - /* ft_putendl(argv[1]); */ - /* return (1); */ - /* } */ - - float positions[] = { - 0.5f, 0.5f, 0.0f, - 0.5f, -0.5f, 0.0f, - -0.5f, -0.5f, 0.0f, - -0.5f, 0.5f, 0.0f - }; - unsigned int index[] = { - 0, 1, 3, - 1, 2, 3 - }; - - object.vertices = malloc(sizeof(positions)); - ft_memcpy(object.vertices, positions, sizeof(positions)); - object.indices = malloc(sizeof(index)); - ft_memcpy(object.indices, index, sizeof(index)); - object.vertices_len = 12; - object.indices_len = 6; - /* for (size_t i = 0; i < object.indices_len; i++) */ - /* printf("%u\n", object.indices[i]); */ - /* for (size_t i = 0; i < object.vertices_len; i++) */ - /* printf("%f\n", object.vertices[i]); */ - /* printf("%lu\n", object.indices_len); */ - - t_ftmmat4 trans; + if (argc != 2) + { + ft_putstr("Usage: "); + ft_putstr(argv[0]); + ft_putendl(" [obj file]"); + return (1); + } + if (parse(argv[1], &object) == -1) + { + ft_putstr("Error: couldn't parse "); + ft_putendl(argv[1]); + return (1); + } + + /* float positions[] = { */ + /* 0.5f, 0.5f, 0.0f, */ + /* 0.5f, -0.5f, 0.0f, */ + /* -0.5f, -0.5f, 0.0f, */ + /* -0.5f, 0.5f, 0.0f */ + /* }; */ + /* unsigned int index[] = { */ + /* 0, 1, 3, */ + /* 1, 2, 3 */ + /* }; */ + /* object.vertices = malloc(sizeof(positions)); */ + /* ft_memcpy(object.vertices, positions, sizeof(positions)); */ + /* object.indices = malloc(sizeof(index)); */ + /* ft_memcpy(object.indices, index, sizeof(index)); */ + /* object.vertices_len = 12; */ + /* object.indices_len = 6; */ + + for (size_t i = 0; i < object.indices_len; i++) + { + printf("%u, ", object.indices[i++]); + printf("%u, ", object.indices[i++]); + printf("%u\n", object.indices[i]); + } + printf("yo %lu\n", object.indices_len); + for (size_t i = 0; i < object.vertices_len; i++) + { + printf("%f, ", object.vertices[i++]); + printf("%f, ", object.vertices[i++]); + printf("%f\n", object.vertices[i]); + } + printf("yo %lu\n", object.vertices_len); + + t_ftmmat4 model; + t_ftmmat4 view; + t_ftmmat4 proj; t_ftmvec3 vec; - ftm_mat4init_eye(&trans, 1.0); - /* ftm_mat4translate(&trans, 0.5, 0.5, 0.0); */ + ftm_mat4init_eye(&model, 1.0); + ftm_mat4translate(&model, 0.0, 0.0, -5.0); + /* ftm_mat4rotate(&model, ftm_radian(45.0), ftm_vec3init(&vec, 0.0, 1.0, 0.0)); */ + /* ftm_mat4scale(&model, 1.1, 1.1, 1.1); */ - ftm_mat4rotate(&trans, ftm_radian(45.0), ftm_vec3init(&vec, 0.0, 0.0, 1.0)); + ftm_mat4init_eye(&view, 1.0); - /* ftm_mat4scale(&trans, 0.5, 0.5, 0.5); */ + ftm_mat4init_perspective(&proj, M_PI_2 / 2.0, 1.0, 0.1, 100.0); + + /* debugmat(&model); */ + /* debugmat(&view); */ + debugmat(&proj); - for (int i = 0; i < 4; i++) - { - for (int j = 0; j < 4; j++) - { - printf("%f, ", trans.m[i * 4 + j]); - } - printf("\n"); - } if ((window = glfw_init(400, 400)) == NULL || gl_state_init(&state, &object) == -1) @@ -84,7 +108,7 @@ int main(int argc, char **argv) GL_CALL(glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)); GL_CALL(glUseProgram(state.shader)); - gl_state_set_mvp(&state, &trans); + gl_state_set_mvp(&state, &model, &view, &proj); while (!glfwWindowShouldClose(window)) { @@ -92,8 +116,18 @@ int main(int argc, char **argv) GL_CALL(glClear(GL_COLOR_BUFFER_BIT)); GL_CALL(glUseProgram(state.shader)); - ftm_mat4rotate(&trans, ftm_radian(1.0), ftm_vec3init(&vec, 0.0, 0.0, 1.0)); - gl_state_set_mvp(&state, &trans); + ftm_mat4rotate(&model, ftm_radian(0.5), ftm_vec3init(&vec, 1.0, 0.0, 0.0)); + + if (g_window_resized) + { + int w, h; + glfwGetFramebufferSize(window, &w, &h); + printf("%d %d\n", w, h); + ftm_mat4init_perspective(&proj, M_PI_2 / 2.0, (float)w / (float)h, 0.1, 100.0); + g_window_resized = false; + } + + gl_state_set_mvp(&state, &model, &view, &proj); GL_CALL(glBindVertexArray(state.vertex_array)); GL_CALL(glDrawElements(GL_TRIANGLES, object.indices_len, GL_UNSIGNED_INT, (void*)0)); |
