From 105fefbaee014678a079d0d8a9dff5b164be3309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20=C5=A0toura=C4=8D?= <525032@mail.muni.cz> Date: Sat, 15 Apr 2023 21:21:24 +0200 Subject: [PATCH] frame methods added --- src/gfx/include/gfx/control.hpp | 9 +++++++-- src/gfx/include/gfx/frame.hpp | 14 +++++++++++--- src/gfx/include/gfx/object.hpp | 2 ++ src/gfx/src/control.cpp | 12 ++++++------ src/gfx/src/obj_control.cpp | 2 +- src/gfx/src/render.cpp | 2 +- 6 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/gfx/include/gfx/control.hpp b/src/gfx/include/gfx/control.hpp index d6b0daa..77369bc 100644 --- a/src/gfx/include/gfx/control.hpp +++ b/src/gfx/include/gfx/control.hpp @@ -13,20 +13,25 @@ class Controller { protected: + //zrusit, pouzivat frame, camera tez glm::vec3 frontVec = glm::vec3(0.0f, 0.0f, -1.0f); glm::vec3 upVec = glm::vec3(0.0f, 1.0f, 0.0f); + float speed = 2.5f; float step = 0; + //shared ptr Frame &bound_frame; public: Controller(Frame &frame) : bound_frame{frame} {} - glm::vec3 getFrontVec() { return frontVec; } - glm::vec3 getUpVec() { return upVec; } + // glm::vec3 getFrontVec() { return frontVec; } + // glm::vec3 getUpVec() { return upVec; } + virtual glm::vec3 getFrontVec() { return frontVec; } + virtual glm::vec3 getUpVec() { return upVec; } virtual void setFrontVec() = 0; //void setUpVec(); TO DO diff --git a/src/gfx/include/gfx/frame.hpp b/src/gfx/include/gfx/frame.hpp index d6a12b7..e934136 100644 --- a/src/gfx/include/gfx/frame.hpp +++ b/src/gfx/include/gfx/frame.hpp @@ -20,13 +20,21 @@ public: { setRotationQuat(rotation); } - + glm::vec3 getPosition() { return positionVec; } glm::quat getRotation() { return rotationQuat; } - glm::mat4 getModelMat() { return glm::translate(glm::mat4(1.0f), positionVec); } - glm::mat4 getViewMat() { return glm::inverse(getModelMat()); } + + // Normalize? + glm::vec3 getRotationAxisX() { return glm::vec3(glm::axis(rotationQuat).x, 0, 0); } + glm::vec3 getRotationAxisY() { return glm::vec3(0, glm::axis(rotationQuat).y, 0); } + glm::vec3 getRotationAxisZ() { return glm::vec3(0, 0, glm::axis(rotationQuat).z); } + + glm::mat4 getTranslationMat() { return glm::translate(glm::mat4(1.0f), positionVec); } glm::mat4 getRotationMat() { return glm::toMat4(rotationQuat); } + glm::mat4 getModelMat() { return getTranslationMat() * getRotationMat(); } + glm::mat4 getViewMat() { return glm::inverse(getModelMat()); } + void setPosVec(glm::vec3 new_position) { positionVec = new_position; } void translatePosVec(glm::vec3 direction) { positionVec += direction; } void setRotationQuat(glm::vec3 new_rotation) { rotationQuat = glm::tquat(glm::radians(new_rotation)); } diff --git a/src/gfx/include/gfx/object.hpp b/src/gfx/include/gfx/object.hpp index fe7c027..ffa7b93 100644 --- a/src/gfx/include/gfx/object.hpp +++ b/src/gfx/include/gfx/object.hpp @@ -11,10 +11,12 @@ class Object { + // vectory do bufferu std::vector<float> vertices; std::vector<unsigned int> indices; std::vector<float> normals; + //shared ptr, VBO do VAO VAO _VAO; VBO _VBO_vertex; VBO _VBO_normal; diff --git a/src/gfx/src/control.cpp b/src/gfx/src/control.cpp index 902c043..d89f6d7 100644 --- a/src/gfx/src/control.cpp +++ b/src/gfx/src/control.cpp @@ -27,27 +27,27 @@ void Controller::move(const std::unordered_set<std::string> &pressed_keys) void Controller::forward() { - bound_frame.translatePosVec(step * frontVec); + bound_frame.translatePosVec(step * getFrontVec()); } void Controller::backward() { - bound_frame.translatePosVec(-step * frontVec); + bound_frame.translatePosVec(-step * getFrontVec()); } void Controller::left() { - bound_frame.translatePosVec(-step * glm::normalize(glm::cross(frontVec, upVec))); + bound_frame.translatePosVec(-step * glm::normalize(glm::cross(getFrontVec(), getUpVec()))); } void Controller::right() { - bound_frame.translatePosVec(step * glm::normalize(glm::cross(frontVec, upVec))); + bound_frame.translatePosVec(step * glm::normalize(glm::cross(getFrontVec(), getUpVec()))); } void Controller::up() { - bound_frame.translatePosVec(step * upVec); + bound_frame.translatePosVec(step * getUpVec()); } void Controller::down() { - bound_frame.translatePosVec(-step * upVec); + bound_frame.translatePosVec(-step * getUpVec()); } void Controller::rotate(glm::vec3 rotational_difference) diff --git a/src/gfx/src/obj_control.cpp b/src/gfx/src/obj_control.cpp index d167cea..16ef9f4 100644 --- a/src/gfx/src/obj_control.cpp +++ b/src/gfx/src/obj_control.cpp @@ -2,5 +2,5 @@ void ObjectController::setFrontVec() // temporary implementation { - frontVec = glm::vec3(0.0f, 0.0f, -1.0f); + //frontVec = glm::vec3(0.0f, 0.0f, -1.0f); } \ No newline at end of file diff --git a/src/gfx/src/render.cpp b/src/gfx/src/render.cpp index 72e6252..e2967cc 100644 --- a/src/gfx/src/render.cpp +++ b/src/gfx/src/render.cpp @@ -102,7 +102,7 @@ void gfx_draw(Shader &myShader, /* ---------------------------------------------------------------- */ // DRAW CUBE - glm::mat4 model = obj_frame.getModelMat() * obj_frame.getRotationMat(); + glm::mat4 model = obj_frame.getModelMat(); glm::mat4 view; view = glm::lookAt(cam_frame.getPosition(), cam_frame.getPosition() + cam_control.getFrontVec(), cam_control.getUpVec()); -- GitLab