/*********************************************************************************************************************** * * Copyright (c) 2010 - 2025 by Tech Soft 3D, Inc. * The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret * as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event * of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized * employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the * scope and manner of such use. * ***********************************************************************************************************************/ #ifndef CAMERA_H #define CAMERA_H #include #include "../utils/bounding_box.h" class Camera { public: enum class EMovement { ZOOM_IN = 0, ZOOM_OUT, FRONT_DIRECT, FRONT_INV, RIGHT_DIRECT, RIGHT_INV, UP_DIRECT, UP_INV, MV_RIGHT, MV_LEFT, MV_UP, MV_DOWN };//enum to manage the different kind of camera moving enum class EView { ISO = 0, TOP, BOTTOM, LEFT, RIGHT, FRONT, BACK };//enum names the computed views glm::vec3 position; glm::vec3 front; glm::vec3 up; glm::vec3 right; glm::vec3 orbital_center; glm::vec3 start_position; glm::vec3 start_front; glm::vec3 start_right; glm::vec3 start_up; // camera Attributes float max_bbx_length; EView current_view; ~Camera()= default; // processes input received from any keyboard-like input system. Accepts input parameter in the form of camera defined ENUM (to abstract it from windowing systems) void process_keyboard(Camera::EMovement direction); // processes input received from a mouse input system. Expects the offset value in both the x and y direction. void process_mouse_rotation(float xOffset, float yOffset, int screenWidth, int screenHeight); // processes input received from a mouse scroll-wheel event. Only requires input on the vertical wheel-axis. void process_mouse_scroll(bool is_zoom_in); // processes input received from a mouse move event. void process_mouse_translation(float xOffset, float yOffset); // process input received from a right mouse click. void process_switch_view(); // set the original position of the camera, calculated with the size of the bounding box void initialize_position( const utils::geometry::BoundingBox& bbox); // processes input received when the O key on the keyboard is pressed. void set_to_origin(); // allows to have the most optimised far after a zoom in or out float calculate_far(); // allows to have the most optimised near after a zoom in or out float calculate_near(); // returns the view matrix calculated glm::mat4 get_view_matrix(); private: // allow to move the camera in cercle from orbital center and the current camera position void rotate_camera(glm::vec3 axe_rotate, float alpha); }; #endif // CAMERA_H