From a8a2bd893c5c146a047dc99c4efd1b9195f93538 Mon Sep 17 00:00:00 2001 From: bog Date: Tue, 14 Nov 2023 01:38:18 +0100 Subject: [PATCH] :sparkles: Canvas rotation and translation. --- assets/shaders/canvas_vertex.glsl | 3 ++- src/arena/Arena.cpp | 4 +++- src/gfx/Canvas.cpp | 15 +++++++++++++++ src/gfx/Canvas.hpp | 6 ++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/assets/shaders/canvas_vertex.glsl b/assets/shaders/canvas_vertex.glsl index 840af99..a37a992 100644 --- a/assets/shaders/canvas_vertex.glsl +++ b/assets/shaders/canvas_vertex.glsl @@ -8,9 +8,10 @@ out vec4 _color; out vec2 _tex_coord; uniform mat4 proj; +uniform mat4 model; void main() { - gl_Position = proj * vec4(pos, 1.0); + gl_Position = proj * model * vec4(pos, 1.0); _color = color; _tex_coord = tex_coord; } diff --git a/src/arena/Arena.cpp b/src/arena/Arena.cpp index daf4a73..37a2763 100644 --- a/src/arena/Arena.cpp +++ b/src/arena/Arena.cpp @@ -11,12 +11,14 @@ namespace rid tex->load(RID_DATADIR / "assets" / "images" / "walk_0.png"); m_canvas->set_texture(std::move(tex)); - m_canvas->draw_tex(glm::vec2 {512.0f, 512.0f}, + m_canvas->draw_tex(glm::vec2 {0.0f, 0.0f}, glm::vec2 {96.0f, 96.0f}, glm::vec4 {1.0f, 1.0f, 1.0f, 1.0f}, glm::vec2 {0.f, 0.0f}, glm::vec2 {32.0f, 32.0f}); + m_canvas->move(glm::vec2 {512.f, 512.f}); + } /*virtual*/ Arena::~Arena() diff --git a/src/gfx/Canvas.cpp b/src/gfx/Canvas.cpp index b8e1db5..fb3e0e5 100644 --- a/src/gfx/Canvas.cpp +++ b/src/gfx/Canvas.cpp @@ -21,6 +21,16 @@ namespace rid glDeleteBuffers(1, &m_vbo); } + void Canvas::move(glm::vec2 pos) + { + m_pos += pos; + } + + void Canvas::rotate(float rad) + { + m_angle += rad; + } + void Canvas::set_texture(std::unique_ptr texture) { m_shaders->use(); @@ -90,6 +100,11 @@ namespace rid { use(); m_shaders->set_mat4("proj", transform); + + auto rot = glm::rotate(glm::mat4 {1.0f}, m_angle, glm::vec3 {0.f, 0.f, 1.f}); + auto loc = glm::translate(glm::mat4 {1.0f}, glm::vec3 {m_pos.x, m_pos.y, 0.f}); + + m_shaders->set_mat4("model", loc * rot); glDrawArrays(GL_TRIANGLES, 0, m_vertices.size()); } diff --git a/src/gfx/Canvas.hpp b/src/gfx/Canvas.hpp index 75b02bd..d4e87f4 100644 --- a/src/gfx/Canvas.hpp +++ b/src/gfx/Canvas.hpp @@ -20,6 +20,9 @@ namespace rid explicit Canvas(); virtual ~Canvas(); + void move(glm::vec2 pos); + void rotate(float rad); + void set_texture(std::unique_ptr texture); // Draw stuff @@ -37,6 +40,9 @@ namespace rid std::unique_ptr m_shaders; std::vector m_vertices; std::unique_ptr m_texture; + glm::vec2 m_pos {0.f}; + float m_angle = 0.f; + GLuint m_vao; GLuint m_vbo;