From 9b03876a3eca5e28e2f7b350ec135dddfb64a6d2 Mon Sep 17 00:00:00 2001 From: Meoweg Date: Fri, 13 Nov 2015 06:59:38 +0000 Subject: [PATCH] Pass MVP and object transformation to model draw --- src/model/model.hpp | 2 +- src/model/raw.cpp | 11 ++++++++++- src/model/raw.hpp | 2 +- src/model/static.cpp | 11 ++++++++++- src/model/static.hpp | 2 +- src/object.cpp | 11 +---------- 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/src/model/model.hpp b/src/model/model.hpp index 663b293..a4a620b 100644 --- a/src/model/model.hpp +++ b/src/model/model.hpp @@ -10,7 +10,7 @@ class Model: public Resource { public: - virtual void draw() const = 0; + virtual void draw(const glm::mat4 &mvp, const glm::mat4 &transformation) const = 0; protected: static GLuint create_array_buffer(GLenum type, GLsizeiptr size, const GLvoid *data); diff --git a/src/model/raw.cpp b/src/model/raw.cpp index 385358e..efe2517 100644 --- a/src/model/raw.cpp +++ b/src/model/raw.cpp @@ -2,6 +2,9 @@ #include +#include +#include + using namespace Models; const std::string Raw::filename(const std::string &name) @@ -33,8 +36,14 @@ Raw::Raw(__attribute__((unused)) Store &store, const std::string &name) id = create_array_buffer(GL_ELEMENT_ARRAY_BUFFER, elements.size() * sizeof(GLushort), elements.data()); } -void Raw::draw() const +void Raw::draw(const glm::mat4 &mvp, const glm::mat4 &transformation) const { + const glm::mat4 transform = mvp * transformation; + glUniformMatrix4fv(mvp_uniform, 1, GL_FALSE, glm::value_ptr(transform)); + + const glm::mat3 local_modelview = glm::transpose(glm::inverse(glm::mat3(transformation))); + glUniformMatrix3fv(local_modelview_uniform, 1, GL_FALSE, glm::value_ptr(local_modelview)); + glEnableVertexAttribArray(INDEX_POSITION); glBindBuffer(GL_ARRAY_BUFFER, positions_id); glVertexAttribPointer(INDEX_POSITION, 3, GL_FLOAT, GL_FALSE, 0, reinterpret_cast(0)); diff --git a/src/model/raw.hpp b/src/model/raw.hpp index 80570fb..7bb7fab 100644 --- a/src/model/raw.hpp +++ b/src/model/raw.hpp @@ -13,7 +13,7 @@ namespace Models RESOURCE(Raw) public: - void draw() const; + void draw(const glm::mat4 &mvp, const glm::mat4 &transformation) const; private: GLuint positions_id; diff --git a/src/model/static.cpp b/src/model/static.cpp index ec855fb..4966ff3 100644 --- a/src/model/static.cpp +++ b/src/model/static.cpp @@ -6,6 +6,9 @@ #include #include +#include +#include + using namespace Models; const std::string Static::filename(const std::string &name) @@ -103,8 +106,14 @@ Static::Static(Store &store, const std::string &name) id = create_array_buffer(GL_ELEMENT_ARRAY_BUFFER, elements.size() * sizeof(GLushort), elements.data()); } -void Static::draw() const +void Static::draw(const glm::mat4 &mvp, const glm::mat4 &transformation) const { + const glm::mat4 transform = mvp * transformation; + glUniformMatrix4fv(mvp_uniform, 1, GL_FALSE, glm::value_ptr(transform)); + + const glm::mat3 local_modelview = glm::transpose(glm::inverse(glm::mat3(transformation))); + glUniformMatrix3fv(local_modelview_uniform, 1, GL_FALSE, glm::value_ptr(local_modelview)); + _material->use(); glEnableVertexAttribArray(INDEX_POSITION); diff --git a/src/model/static.hpp b/src/model/static.hpp index 76e4b03..08c637d 100644 --- a/src/model/static.hpp +++ b/src/model/static.hpp @@ -14,7 +14,7 @@ namespace Models RESOURCE(Static) public: - void draw() const; + void draw(const glm::mat4 &mvp, const glm::mat4 &transformation) const; private: GLuint positions_id; diff --git a/src/object.cpp b/src/object.cpp index c1d77dc..c98451f 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -1,18 +1,9 @@ #include "object.hpp" -#include -#include - void Object::draw(const glm::mat4 &mvp) const { if (!visible) return; - const glm::mat4 transform = mvp * transformation(); - glUniformMatrix4fv(mvp_uniform, 1, GL_FALSE, glm::value_ptr(transform)); - - const glm::mat3 local_modelview = glm::transpose(glm::inverse(glm::mat3(transformation()))); - glUniformMatrix3fv(local_modelview_uniform, 1, GL_FALSE, glm::value_ptr(local_modelview)); - - _model.draw(); + _model.draw(mvp, transformation()); }