diff --git a/src/gfx/include/gfx/control.hpp b/src/gfx/include/gfx/control.hpp index d6b0daa780f831499a9b90bf9b9448a14df4eda2..77369bc5afda3ac68da5bbc0b82c7b5e7bbcb638 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 d6a12b7bbb1b12dda7356b2b144e8439a13dc5ae..e934136aeea079c0dfd6620c99b0b7152f1405a6 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 fe7c027ac919400cd1aca7ad70f2772d864538c0..ffa7b9312929d626ea6623594887eec1a93477a9 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 902c04337b30962c22a9983984cb86255a17fd5e..d89f6d7c46429b02963351a2a235921842030f7a 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 d167cea5fa320cf0ffafa60c5ab6ce3062fb946f..16ef9f43b1358d1b1e687033c07a9ac708c2bc81 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 72e62525b9446a67dc0202189ca1ab8ac9e3ff42..e2967cc7861890847dac8530b3c62f38636e800f 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());