diff --git a/src/gfx/include/gfx/light.hpp b/src/gfx/include/gfx/light.hpp index 399abe52a3f257c5d1e3b9907ea4d24ed9ea9927..163e6d968633174d35641926e99fbaef543d4b4a 100644 --- a/src/gfx/include/gfx/light.hpp +++ b/src/gfx/include/gfx/light.hpp @@ -16,8 +16,9 @@ class Light : public ObjectBase protected: glm::vec3 color; frame_weak_ptr frame; + public: - Light(glm::vec3 _color, frame_ptr _pos) : color{_color}, frame{_pos} {} + Light(glm::vec3 _color, frame_ptr _frame) : color{_color}, frame{_frame} {} glm::vec3 getColor() const { return color; } virtual glm::vec3 getPosition() const diff --git a/src/gfx/include/gfx/node.hpp b/src/gfx/include/gfx/node.hpp index 5978abd1929db9b3324c36984d8962535eb53eea..f221afda55c65b30961695d58bbbe98788708444 100644 --- a/src/gfx/include/gfx/node.hpp +++ b/src/gfx/include/gfx/node.hpp @@ -38,8 +38,8 @@ public: // void setChildren(std::vector<node_ptr> _children) { children = _children; } void setParent(parent_weak_ptr _parent) { parent = _parent; } - void addObject(ObjectBase _obj) { objects.emplace_back(std::make_shared<ObjectBase>(_obj)); } - void addObject(objectbase_ptr _obj) { objects.emplace_back(_obj); } + void addObject(ObjectBase obj) { objects.emplace_back(std::make_shared<ObjectBase>(obj)); } + void addObject(objectbase_ptr obj) { objects.emplace_back(obj); } }; diff --git a/src/gfx/include/gfx/obj_control.hpp b/src/gfx/include/gfx/obj_control.hpp index dfdc42c6812de4b9d48a9b2c36ee82eca5bae23c..6f9c4dc4723b5d950a88cfd7ceb10040fa9862e8 100644 --- a/src/gfx/include/gfx/obj_control.hpp +++ b/src/gfx/include/gfx/obj_control.hpp @@ -21,11 +21,12 @@ public: glm::vec3 getFrontVec() const override { return glm::vec3(0.0f, 0.0f, -1.0f); } glm::vec3 getUpVec() const override { return glm::vec3(0.0f, 1.0f, 0.0f); } - void mouse_rotate(const osi::Mouse &mouse); - glm::vec3 make_path(glm::vec3 &new_pos, glm::vec3 &prev_plane_intersect, bool &object_moving); - void mouse_horizontal_move(const glm::vec3 &rayPosition, const glm::vec3 &rayDirection, glm::vec3 &prev_plane_intersect, bool &object_moving); - void mouse_elevation_move(const glm::vec3 &rayPosition, const glm::vec3 &rayDirection, const glm::quat &cameraRotation, glm::vec3 &prev_plane_intersect, bool &object_moving); + void mouseRotate(const osi::Mouse &mouse); + void mouseHorizontalMove(const glm::vec3 &ray_position, const glm::vec3 &ray_direction, glm::vec3 &prev_plane_intersect, bool &object_moving); + void mouseElevationMove(const glm::vec3 &ray_position, const glm::vec3 &ray_direction, const glm::quat &camera_rotation, glm::vec3 &prev_plane_intersect, bool &object_moving); }; +glm::vec3 make_path(glm::vec3 &new_pos, glm::vec3 &prev_plane_intersect, bool &object_moving); + #endif \ No newline at end of file diff --git a/src/gfx/src/obj_control.cpp b/src/gfx/src/obj_control.cpp index bd9c548df1f55eb2988d51859c9a333600f4ad70..0a3680265b33f2fb3f0e5dc5772d7a54fb1bc013 100644 --- a/src/gfx/src/obj_control.cpp +++ b/src/gfx/src/obj_control.cpp @@ -1,6 +1,6 @@ #include <gfx/obj_control.hpp> -void ObjectController::mouse_rotate(const osi::Mouse &mouse) +void ObjectController::mouseRotate(const osi::Mouse &mouse) { // check for start at object? if (!mouse.down().contains("MouseLeft")) @@ -17,32 +17,22 @@ void ObjectController::mouse_rotate(const osi::Mouse &mouse) bound_frame->rotateRotationQuat(glm::angleAxis(xoffset * step, glm::vec3(0.0f, 1.0f, 0.0f))); } -glm::vec3 ObjectController::make_path(glm::vec3 &new_pos, glm::vec3 &prev_plane_intersect, bool &object_moving) -{ - if (object_moving) - return new_pos - prev_plane_intersect; - - prev_plane_intersect = new_pos; - object_moving = true; - return glm::vec3(0.0f, 0.0f, 0.0f); -} - -void ObjectController::mouse_horizontal_move(const glm::vec3 &rayPosition, const glm::vec3 &rayDirection, glm::vec3 &prev_plane_intersect, bool &object_moving) +void ObjectController::mouseHorizontalMove(const glm::vec3 &ray_position, const glm::vec3 &ray_direction, glm::vec3 &prev_plane_intersect, bool &object_moving) { auto selection_y_pos = bound_frame->getPosition().y; // NOTE: Worked incorrectly with normal (0, 1, 0) - if (glm::dot(glm::vec3(0.0f, -1.0f, 0.0f), rayDirection) == 0) + if (glm::dot(glm::vec3(0.0f, -1.0f, 0.0f), ray_direction) == 0) return; - float t = -(glm::dot(glm::vec3(0.0f, -1.0f, 0.0f), rayPosition) + selection_y_pos) / glm::dot(glm::vec3(0.0f, -1.0f, 0.0f), rayDirection); + float t = -(glm::dot(glm::vec3(0.0f, -1.0f, 0.0f), ray_position) + selection_y_pos) / glm::dot(glm::vec3(0.0f, -1.0f, 0.0f), ray_direction); if (t < 0) // No intersection return; if (t > 100.0f) // Far Plane t = 100.0f; - glm::vec3 new_pos = rayPosition + rayDirection * t; + glm::vec3 new_pos = ray_position + ray_direction * t; auto path = make_path(new_pos, prev_plane_intersect, object_moving); path.y = 0.0f; @@ -52,21 +42,21 @@ void ObjectController::mouse_horizontal_move(const glm::vec3 &rayPosition, const prev_plane_intersect = new_pos; } -void ObjectController::mouse_elevation_move(const glm::vec3 &rayPosition, const glm::vec3 &rayDirection, const glm::quat &cameraRotation, glm::vec3 &prev_plane_intersect, bool &object_moving) +void ObjectController::mouseElevationMove(const glm::vec3 &ray_position, const glm::vec3 &ray_direction, const glm::quat &camera_rotation, glm::vec3 &prev_plane_intersect, bool &object_moving) { - Frame atObjectVerticalPlane(bound_frame->getPosition(), cameraRotation); + Frame atObjectVerticalPlane(bound_frame->getPosition(), camera_rotation); auto normal = glm::normalize(glm::cross(atObjectVerticalPlane.getRotationAxisX(), glm::vec3(0.0f, 1.0f, 0.0f))); auto d = glm::dot(normal, glm::vec3(0, 0, 0) - bound_frame->getPosition()) / glm::length(normal); - float t = -(glm::dot(normal, rayPosition) + d) / glm::dot(normal, rayDirection); + float t = -(glm::dot(normal, ray_position) + d) / glm::dot(normal, ray_direction); if (t < 0) // No intersection return; if (t > 100.0f) // Far Plane t = 100.0f; - glm::vec3 new_pos = rayPosition + rayDirection * t; + glm::vec3 new_pos = ray_position + ray_direction * t; auto path = make_path(new_pos, prev_plane_intersect, object_moving); path.x = 0.0f; @@ -75,4 +65,14 @@ void ObjectController::mouse_elevation_move(const glm::vec3 &rayPosition, const bound_frame->translatePosVec(path); prev_plane_intersect = new_pos; +} + +glm::vec3 make_path(glm::vec3 &new_pos, glm::vec3 &prev_plane_intersect, bool &object_moving) +{ + if (object_moving) + return new_pos - prev_plane_intersect; + + prev_plane_intersect = new_pos; + object_moving = true; + return glm::vec3(0.0f, 0.0f, 0.0f); } \ No newline at end of file diff --git a/src/studio/src/simulator.cpp b/src/studio/src/simulator.cpp index 87bcb031408f61f06a1018d25fa8b62fe68c3654..c49f5be76af2b9b197c779e4a11dea0cdd983ad2 100644 --- a/src/studio/src/simulator.cpp +++ b/src/studio/src/simulator.cpp @@ -577,11 +577,11 @@ void Simulator::move_object() controller->setup(timer().dt(), selection->getFrame()); if (keyboard().down().contains("LeftShift")) - controller->mouse_elevation_move(rayPosition, rayDirection, + controller->mouseElevationMove(rayPosition, rayDirection, active_cameras[0]->getFrame()->getRotation(), prev_plane_intersect, object_moving); else - controller->mouse_horizontal_move(rayPosition, rayDirection, prev_plane_intersect, object_moving); + controller->mouseHorizontalMove(rayPosition, rayDirection, prev_plane_intersect, object_moving); } void Simulator::rotate_object() @@ -590,7 +590,7 @@ void Simulator::rotate_object() return; auto controller = obj_controls[object_ctrl_type]; controller->setup(timer().dt(), selection->getFrame()); - controller->mouse_rotate(mouse()); + controller->mouseRotate(mouse()); } void Simulator::add_object()