diff --git a/data/shaders/lightshader.vert b/data/shaders/lightshader.vert index 022a844ba6936505d95484a402f4e32b30be1b88..1e1282a48ef2e16072fab276635bc7e370c15a24 100644 --- a/data/shaders/lightshader.vert +++ b/data/shaders/lightshader.vert @@ -11,7 +11,8 @@ uniform mat4 projection; void main() { - Normal = aNormal; + //Normal = aNormal; + Normal = vec3(model * vec4(aNormal, 0.0)); FragPos = vec3(model * vec4(aPos, 1.0)); gl_Position = projection * view * vec4(FragPos, 1.0); diff --git a/src/gfx/include/gfx/cam_control.hpp b/src/gfx/include/gfx/cam_control.hpp index 372dbe82e9f9a868071ddd6a3e30bc5e2384708a..516bf5e785ef97f90b68739c943ef69a9656bf7f 100644 --- a/src/gfx/include/gfx/cam_control.hpp +++ b/src/gfx/include/gfx/cam_control.hpp @@ -10,7 +10,6 @@ class CameraController : public Controller { - // TO DO: change to use quaternion float pitch = 0.0f; float yaw = -90.0f; @@ -25,7 +24,7 @@ public: void setPitch(float yoffset); void setYaw(float xoffset); - void setFrontVec() override; + void setFrontVec(); void turn(float xoffset, float yoffset); diff --git a/src/gfx/include/gfx/control.hpp b/src/gfx/include/gfx/control.hpp index 40379aa04accb6c0fae24a3cb2ce35bf9ed15dcb..e3520a34701379d235f46bfc04fa65724a03fbf1 100644 --- a/src/gfx/include/gfx/control.hpp +++ b/src/gfx/include/gfx/control.hpp @@ -13,11 +13,6 @@ class Controller { protected: - // TO DO: 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; @@ -28,10 +23,9 @@ public: Controller(Frame &frame) : bound_frame{frame} {} - virtual glm::vec3 getFrontVec() { return frontVec; } - virtual glm::vec3 getUpVec() { return upVec; } - virtual void setFrontVec() = 0; - // void setUpVec(); // TO DO + virtual glm::vec3 getFrontVec() { return -bound_frame.getRotationAxisZ(); } + virtual glm::vec3 getUpVec() { return glm::vec3(0.0f, 1.0f, 0.0f); } + // virtual void setUpVec(); void setStep(float dt); void setSpeed(float new_speed); diff --git a/src/gfx/include/gfx/frame.hpp b/src/gfx/include/gfx/frame.hpp index e59c5e3044a76394525958c9b7d18e85e776ad53..bdb6688aa5fb8be89d224ca31d3946b89e3e4b44 100644 --- a/src/gfx/include/gfx/frame.hpp +++ b/src/gfx/include/gfx/frame.hpp @@ -7,6 +7,7 @@ #include <glm/gtc/type_ptr.hpp> #include <glm/gtc/quaternion.hpp> #include <glm/gtx/quaternion.hpp> +#include <glm/gtc/matrix_access.hpp> #include <vector> class Frame @@ -26,10 +27,9 @@ public: glm::quat getRotation() { return rotationQuat; } glm::vec3 getScale() { return scale; } - // ??? - 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::vec3 getRotationAxisX() { return glm::column(glm::toMat3(rotationQuat), 0); } + glm::vec3 getRotationAxisY() { return glm::column(glm::toMat3(rotationQuat), 1); } + glm::vec3 getRotationAxisZ() { return glm::column(glm::toMat3(rotationQuat), 2); } glm::mat4 getTranslationMat() { return glm::translate(glm::mat4(1.0f), positionVec); } glm::mat4 getRotationMat() { return glm::toMat4(rotationQuat); } @@ -41,6 +41,7 @@ public: 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)); } + void setRotationQuat(glm::quat new_rotation) { rotationQuat = new_rotation; } void rotateRotationQuat(glm::vec3 rotation) { rotationQuat *= glm::tquat(glm::radians(rotation)); } void setScale(glm::vec3 _scale) { scale = _scale; } }; diff --git a/src/gfx/include/gfx/obj_control.hpp b/src/gfx/include/gfx/obj_control.hpp index 730ed2e9a0658a741d0bf9b5268e2e515a371055..7b16596bc8c47ac3be29df342ee5bb0a253eedc7 100644 --- a/src/gfx/include/gfx/obj_control.hpp +++ b/src/gfx/include/gfx/obj_control.hpp @@ -13,14 +13,8 @@ class ObjectController : public Controller { - // QUESTION: set automatically relative to camera or axis movement? - // Currently: object axis - // glm::vec3 frontVec = glm::vec3(0.0f, 0.0f, -1.0f); - // glm::vec3 upVec = glm::vec3(0.0f, 1.0f, 0.0f); - public: using Controller::Controller; - void setFrontVec() override; }; diff --git a/src/gfx/src/cam_control.cpp b/src/gfx/src/cam_control.cpp index 17bdbf06703af606d851548244482cbb5b3539af..a843531ef5c86fbb2979b1a5b842bc8e1bbfd38c 100644 --- a/src/gfx/src/cam_control.cpp +++ b/src/gfx/src/cam_control.cpp @@ -22,7 +22,12 @@ void CameraController::setFrontVec() front.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch)); front.y = sin(glm::radians(pitch)); front.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch)); - frontVec = glm::normalize(front); + // front.x = glm::degrees(acos(cos(glm::radians(yaw)) * cos(glm::radians(pitch)))); + // front.y = glm::degrees(asin(sin(glm::radians(pitch)))); + // front.z = glm::degrees(sin(glm::radians(yaw)) * cos(glm::radians(pitch))); + front = glm::normalize(front); + glm::quat front_quat = glm::quatLookAt(front, getUpVec()); + bound_frame.setRotationQuat(front_quat); } void CameraController::turn(float xoffset, float yoffset) diff --git a/src/gfx/src/obj_control.cpp b/src/gfx/src/obj_control.cpp index d167cea5fa320cf0ffafa60c5ab6ce3062fb946f..6a4504dac036a61ca0cd334c18d9d33331d7bf53 100644 --- a/src/gfx/src/obj_control.cpp +++ b/src/gfx/src/obj_control.cpp @@ -1,6 +1 @@ #include <gfx/obj_control.hpp> - -void ObjectController::setFrontVec() // temporary implementation -{ - frontVec = glm::vec3(0.0f, 0.0f, -1.0f); -} \ No newline at end of file diff --git a/src/studio/src/simulator.cpp b/src/studio/src/simulator.cpp index 877a4776962d71ed89f0cbe1a9d3e73a438d9677..7ad8cf77589459ea4ff76950630ce01d7e4cc5a0 100644 --- a/src/studio/src/simulator.cpp +++ b/src/studio/src/simulator.cpp @@ -117,7 +117,7 @@ Simulator::Simulator() std::make_shared<Shader>("./data/shaders/basicshader.vert", "./data/shaders/basicshader.frag")} , camera{60.0f} - , cam_frame{{0.0f, 1.0f, 6.0f}, {0.0f, -90.0f, 0.0f}} // Setting camera rotation currently does nothing + , cam_frame{{0.0f, 1.0f, 6.0f}, {0.0f, 0.0f, 0.0f}} , cam_control{cam_frame} , objects{std::make_shared<Object>(lit_cube_vertices, lit_cube_indices, lit_cube_normals), std::make_shared<Object>(lit_cube_vertices, lit_cube_indices, lit_cube_normals, glm::vec3(1.0f, 1.0f, 1.0f))} @@ -129,7 +129,7 @@ Simulator::Simulator() objects[1]->setToLight(true); obj_frames[1]->setScale(glm::vec3(0.1f, 0.1f, 0.1f)); camera.setWindowSize(window().size()); - // obj_controls[0]->rotate(glm::vec3(0.0f, 50.0f, 0.0f)); + obj_controls[0]->rotate(glm::vec3(0.0f, 50.0f, 0.0f)); } Simulator::~Simulator() {}