a-game

2D platformer written from scratch.
Log | Files | Refs | README | LICENSE

commit 30201940f1df5705ee1edb5bff8f552be10a2a26
parent 6d123e09139e715822372142ca754f6a4c78a50b
Author: Amin Mesbah <dev@aminmesbah.com>
Date:   Thu, 18 Apr 2019 13:44:15 -0700

Use a view matrix

Diffstat:
Mshader/main_v.glsl | 3++-
Msrc/game.c | 26+++++++++++++++++---------
2 files changed, 19 insertions(+), 10 deletions(-)

diff --git a/shader/main_v.glsl b/shader/main_v.glsl @@ -5,11 +5,12 @@ layout (location = 0) in vec2 position; out vec4 vertex_color; uniform mat4 model; +uniform mat4 view; uniform mat4 projection; uniform vec3 color; void main() { - gl_Position = projection * model * vec4(position, 0.0f, 1.0f); + gl_Position = projection * view * model * vec4(position, 0.0f, 1.0f); vertex_color = vec4(color, 1.0f); } diff --git a/src/game.c b/src/game.c @@ -150,7 +150,8 @@ void game_update_and_render(struct GameMemory *game_memory, struct GameInput *ga model = glmth_translate(model, (v3) { viewport.min.x + (tile_size * x), viewport.min.y + (tile_size * y), 0.0f }); model = glmth_scale(model, (v3) {tile_size, tile_size, 1.0f}); - shader_setm4(&game_state->tiles.shader, "model", &model); + m4 view = glmth_m4_init_id(); + v3 color; if (tile_id > 0) { @@ -162,6 +163,8 @@ void game_update_and_render(struct GameMemory *game_memory, struct GameInput *ga } shader_setv3(&game_state->tiles.shader, "color", &color); + shader_setm4(&game_state->tiles.shader, "model", &model); + shader_setm4(&game_state->tiles.shader, "view", &view); shader_setm4(&game_state->tiles.shader, "projection", &projection); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); @@ -192,8 +195,8 @@ void game_update_and_render(struct GameMemory *game_memory, struct GameInput *ga { game_state->player.pos.x += movement_speed; } - //glmth_clamp(&(game_state->player.pos.x), 0, ROOM_TILE_DIM_X); - //glmth_clamp(&(game_state->player.pos.y), 0, ROOM_TILE_DIM_Y); + glmth_clamp(&(game_state->player.pos.x), 0, ROOM_TILE_DIM_X); + glmth_clamp(&(game_state->player.pos.y), 0, ROOM_TILE_DIM_Y); } // render player @@ -206,14 +209,17 @@ void game_update_and_render(struct GameMemory *game_memory, struct GameInput *ga // these dimensions are relative to a square 'meter', one tile v2 player_dim = { 0.375f, 0.583f }; + // TODO: move ppm out of this matrix m4 model = glmth_m4_init_id(); - model = glmth_translate(model, (v3) {0.0f, framebuffer.height, 0.0f}); - model = glmth_scale(model, (v3) {1.0f, -1.0f, 1.0f}); - model = glmth_translate(model, (v3) { viewport.min.x, viewport.min.y, 0.0f }); - model = glmth_translate(model, (v3) { player.pos.x * ppm, player.pos.y * ppm, 0.0f }); - model = glmth_scale(model, (v3) { player_dim.x * ppm, player_dim.y * ppm, 1.0f }); + model = glmth_translate(model, (v3) {player.pos.x * ppm, player.pos.y * ppm, 0.0f}); + model = glmth_scale(model, (v3) {player_dim.x * ppm, player_dim.y * ppm, 1.0f}); shader_setm4(&game_state->tiles.shader, "model", &model); + m4 view = glmth_m4_init_id(); + view = glmth_translate(view, (v3) {0.0f, framebuffer.height, 0.0f}); + view = glmth_scale(view, (v3) {1.0f, -1.0f, 1.0f}); + view = glmth_translate(view, (v3) {viewport.min.x, viewport.min.y, 0.0f}); + { printf("Framebuffer :"); glmth_v2_print((v2) {framebuffer.width, framebuffer.height}); @@ -234,8 +240,10 @@ void game_update_and_render(struct GameMemory *game_memory, struct GameInput *ga } v3 color = (v3) { 1.0f, 0.0f, 1.0f }; - shader_setv3(&game_state->tiles.shader, "color", &color); + shader_setv3(&game_state->tiles.shader, "color", &color); + shader_setm4(&game_state->tiles.shader, "model", &model); + shader_setm4(&game_state->tiles.shader, "view", &view); shader_setm4(&game_state->tiles.shader, "projection", &projection); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);