summaryrefslogtreecommitdiff
path: root/inc/opengl/transform.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'inc/opengl/transform.hpp')
-rw-r--r--inc/opengl/transform.hpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/inc/opengl/transform.hpp b/inc/opengl/transform.hpp
new file mode 100644
index 0000000..9d0988c
--- /dev/null
+++ b/inc/opengl/transform.hpp
@@ -0,0 +1,52 @@
+#ifndef transform_h
+#define transform_h
+
+#include <glm/glm.hpp>
+#include <glm/gtx/transform.hpp>
+
+#include "camera.hpp"
+
+struct Transform
+{
+public:
+ Transform(const glm::vec3& pos = glm::vec3(), const glm::vec3& rot = glm::vec3(), const glm::vec3& scale = glm::vec3(1.0f, 1.0f, 1.0f))
+ {
+ this->pos = pos;
+ this->rot = rot;
+ this->scale = scale;
+ }
+
+ inline glm::mat4 GetModel() const
+ {
+ glm::mat4 posMat = glm::translate(pos);
+ glm::mat4 scaleMat = glm::scale(scale);
+ glm::mat4 rotX = glm::rotate(rot.x, glm::vec3(1.0, 0.0, 0.0));
+ glm::mat4 rotY = glm::rotate(rot.y, glm::vec3(0.0, 1.0, 0.0));
+ glm::mat4 rotZ = glm::rotate(rot.z, glm::vec3(0.0, 0.0, 1.0));
+ glm::mat4 rotMat = rotX * rotY * rotZ;
+
+ return posMat * rotMat * scaleMat;
+ }
+
+ inline glm::mat4 GetMVP(const Camera& camera) const
+ {
+ glm::mat4 VP = camera.GetViewProjection();
+ glm::mat4 M = GetModel();
+
+ return VP * M;
+ }
+
+ inline glm::vec3* GetPos() { return &pos; }
+ inline glm::vec3* GetRot() { return &rot; }
+ inline glm::vec3* GetScale() { return &scale; }
+
+ inline void SetPos(glm::vec3& pos) { this->pos = pos; }
+ inline void SetRot(glm::vec3& rot) { this->rot = rot; }
+ inline void SetScale(glm::vec3& scale) { this->scale = scale; }
+private:
+ glm::vec3 pos;
+ glm::vec3 rot;
+ glm::vec3 scale;
+};
+
+#endif