diff --git a/modules/camera/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp index 7d91b4b45247cd171c174a4dd02651a0b8e63436..31f4aae60cf54a98c48d284ed07e1e3009feb571 100644 --- a/modules/camera/include/vkcv/camera/Camera.hpp +++ b/modules/camera/include/vkcv/camera/Camera.hpp @@ -42,10 +42,10 @@ namespace vkcv { /** * @brief Sets the perspective object according to @p fov, @p ratio, @p near and @p far. This leads to changes in the projection matrix of the camera - * @param fov The desired field of view in radians - * @param ratio The aspect ratio - * @param near Distance to near clipping plane - * @param far Distance to far clipping plane + * @param[in] fov The desired field of view in radians + * @param[in] ratio The aspect ratio + * @param[in] near Distance to near clipping plane + * @param[in] far Distance to far clipping plane */ void setPerspective(float fov, float ratio, float near, float far); @@ -57,9 +57,9 @@ namespace vkcv { /** * @brief Sets the view matrix of the camera according to @p position, @p center and @p up - * @param[out] position The position of the camera - * @param[out] center The target position the camera is looking at - * @param[out] up The vector that defines which direction is 'up' depending on the camera's orientation + * @param[in] position The position of the camera + * @param[in] center The target position the camera is looking at + * @param[in] up The vector that defines which direction is 'up' depending on the camera's orientation */ void lookAt(glm::vec3 position, glm::vec3 center, glm::vec3 up); @@ -145,7 +145,7 @@ namespace vkcv { /** * @brief Sets @p center as the new center point. - * @param center The new center point. + * @param[in] center The new center point. */ void setCenter(glm::vec3 center); @@ -181,7 +181,7 @@ namespace vkcv { /** * @brief Sets @p up as the new up vector. - * @param up The new up vector. + * @param[in] up The new up vector. */ void setUp(const glm::vec3 &up); }; diff --git a/modules/camera/include/vkcv/camera/CameraController.hpp b/modules/camera/include/vkcv/camera/CameraController.hpp index f8a1ea0e81eda3061b2dd039a0c33ccff4ca129e..467992c32d062617b6660fa46d999ac78faad664 100644 --- a/modules/camera/include/vkcv/camera/CameraController.hpp +++ b/modules/camera/include/vkcv/camera/CameraController.hpp @@ -19,8 +19,9 @@ namespace vkcv { CameraController() = default; /** - * @brief Updates the camera object in respect to @p deltaTime. - * @param deltaTime The time that has passed since last update. + * @brief Updates @p camera in respect to @p deltaTime. + * @param[in] deltaTime The time that has passed since last update. + * @param[in] camera The camera object. */ virtual void updateCamera(double deltaTime, Camera &camera); @@ -30,6 +31,7 @@ namespace vkcv { * @param[in] scancode The platform-specific scancode. * @param[in] action The key action. * @param[in] mods The modifier bits. + * @param[in] camera The camera object. */ virtual void keyCallback(int key, int scancode, int action, int mods, Camera &camera); @@ -37,6 +39,7 @@ namespace vkcv { * @brief A callback function for mouse scrolling events. * @param[in] offsetX The offset in horizontal direction. * @param[in] offsetY The offset in vertical direction. + * @param[in] camera The camera object. */ virtual void scrollCallback( double offsetX, double offsetY, Camera &camera); @@ -44,6 +47,7 @@ namespace vkcv { * @brief A callback function for mouse movement events. * @param[in] x The horizontal mouse position. * @param[in] y The vertical mouse position. + * @param[in] camera The camera object. */ virtual void mouseMoveCallback(double offsetX, double offsetY, Camera &camera); @@ -52,6 +56,7 @@ namespace vkcv { * @param[in] button The mouse button. * @param[in] action The button action. * @param[in] mods The modifier bits. + * @param[in] camera The camera object. */ virtual void mouseButtonCallback(int button, int action, int mods, Camera &camera); }; diff --git a/modules/camera/include/vkcv/camera/CameraManager.hpp b/modules/camera/include/vkcv/camera/CameraManager.hpp index acaa6bcf4135463a5c48aa1ea118a20f7b90b1ad..e75ec1693c7492dbed40a782b17f7b928455f9fd 100644 --- a/modules/camera/include/vkcv/camera/CameraManager.hpp +++ b/modules/camera/include/vkcv/camera/CameraManager.hpp @@ -113,14 +113,14 @@ namespace vkcv { /** * @brief Adds a new camera object to the #CameraManager and binds it to a camera controller object of specified * @p controllerType. - * @param controllerType The type of the camera controller. + * @param[in] controllerType The type of the camera controller. * @return The index of the newly created camera object. */ int addCamera(ControllerType controllerType); /** * @brief Gets the stored camera object located at @p cameraIndex. - * @param cameraIndex The camera index. + * @param[in] cameraIndex The camera index. * @return The camera object at @p cameraIndex. * @throws std::runtime_error If @p cameraIndex is not a valid camera index. */ @@ -134,7 +134,7 @@ namespace vkcv { /** * @brief Sets the stored camera object located at @p cameraIndex as the active camera. - * @param cameraIndex The camera index. + * @param[in] cameraIndex The camera index. * @throws std::runtime_error If @p cameraIndex is not a valid camera index. */ void setActiveCamera(uint32_t cameraIndex); @@ -148,15 +148,15 @@ namespace vkcv { /** * @brief Binds a stored camera object located at @p cameraIndex to a camera controller of specified * @p controllerType. - * @param cameraIndex The camera index. - * @param controllerType The type of the camera controller. + * @param[in] cameraIndex The camera index. + * @param[in] controllerType The type of the camera controller. * @throws std::runtime_error If @p cameraIndex is not a valid camera index. */ void setControllerType(uint32_t cameraIndex, ControllerType controllerType); /** * @brief Gets the currently bound camera controller type of the stored camera object located at @p cameraIndex. - * @param cameraIndex The camera index. + * @param[in] cameraIndex The camera index. * @return The type of the camera controller of the specified camera object. * @throws std::runtime_error If @p cameraIndex is not a valid camera index. */ @@ -164,14 +164,14 @@ namespace vkcv { /** * @brief Gets a camera controller object of specified @p controllerType. - * @param controllerType The type of the camera controller. + * @param[in] controllerType The type of the camera controller. * @return The specified camera controller object. */ CameraController& getControllerByType(ControllerType controllerType); /** * @brief Updates all stored camera controllers in respect to @p deltaTime. - * @param deltaTime The time that has passed since last update. + * @param[in] deltaTime The time that has passed since last update. */ void update(double deltaTime); diff --git a/modules/camera/include/vkcv/camera/PilotCameraController.hpp b/modules/camera/include/vkcv/camera/PilotCameraController.hpp index ef6104f9c5968283afabf9a3e1d46fde56dd7f99..68a9eb44870a7eccd5a8d527a0d8d12d9ac6553e 100644 --- a/modules/camera/include/vkcv/camera/PilotCameraController.hpp +++ b/modules/camera/include/vkcv/camera/PilotCameraController.hpp @@ -27,15 +27,17 @@ namespace vkcv { /** - * @brief Updates the position of the camera with respect to @p deltaTime. + * @brief Updates the position of @p camera with respect to @p deltaTime. * @param[in] deltaTime The time that has passed since last update. + * @param[in] camera The camera object. * @return The updated camera position. */ glm::vec3 updatePosition(double deltaTime, Camera &camera); /** - * @brief Updates the view matrix of the camera with respect to @p deltaTime. - * @param deltaTime The time that has passed since last update. + * @brief Updates the view matrix of @p camera with respect to @p deltaTime. + * @param[in] deltaTime The time that has passed since last update. + * @param[in] camera The camera object. * @return The updated view matrix of the camera. */ glm::mat4 updateView(double deltaTime, Camera &camera); @@ -89,22 +91,25 @@ namespace vkcv { ~PilotCameraController() = default; /** - * @brief Changes the field of view of the camera with an @p offset in degrees. + * @brief Changes the field of view of @p camera with an @p offset in degrees. * @param[in] offset The offset in degrees. + * @param[in] camera The camera object. */ void changeFov(double offset, Camera &camera); /** - * @brief Pans the view of the camera according to the pitch and yaw values and additional offsets @p xOffset + * @brief Pans the view of @p camera according to the pitch and yaw values and additional offsets @p xOffset * and @p yOffset. * @param[in] xOffset The offset added to the yaw value. * @param[in] yOffset The offset added to the pitch value. + * @param[in] camera The camera object. */ void panView(double xOffset, double yOffset, Camera &camera); /** - * @brief Updates the camera object in respect to @p deltaTime. - * @param deltaTime The time that has passed since last update. + * @brief Updates @p camera in respect to @p deltaTime. + * @param[in] deltaTime The time that has passed since last update. + * @param[in] camera The camera object. */ void updateCamera(double deltaTime, Camera &camera); @@ -114,14 +119,16 @@ namespace vkcv { * @param[in] scancode The platform-specific scancode. * @param[in] action The key action. * @param[in] mods The modifier bits. + * @param[in] camera The camera object. */ void keyCallback(int key, int scancode, int action, int mods, Camera &camera); /** * @brief A callback function for mouse scrolling events. Currently, this leads to changes in the field of view - * of the camera object. + * of @p camera. * @param[in] offsetX The offset in horizontal direction. * @param[in] offsetY The offset in vertical direction. + * @param[in] camera The camera object. */ void scrollCallback(double offsetX, double offsetY, Camera &camera); @@ -130,6 +137,7 @@ namespace vkcv { * if #mouseButtonCallback(int button, int action, int mods) enabled panning. * @param[in] x The horizontal mouse position * @param[in] y The vertical mouse position + * @param[in] camera The camera object. */ void mouseMoveCallback(double x, double y, Camera &camera); @@ -139,6 +147,7 @@ namespace vkcv { * @param[in] button The mouse button * @param[in] action The button action * @param[in] mods The modifier bits + * @param[in] camera The camera object. */ void mouseButtonCallback(int button, int action, int mods, Camera &camera); }; diff --git a/modules/camera/include/vkcv/camera/TrackballCameraController.hpp b/modules/camera/include/vkcv/camera/TrackballCameraController.hpp index 56ae4732d4bff2396a1cc6de2622458c108e12d1..e541645dd42878467d22e91d31745db91bbb8416 100644 --- a/modules/camera/include/vkcv/camera/TrackballCameraController.hpp +++ b/modules/camera/include/vkcv/camera/TrackballCameraController.hpp @@ -17,22 +17,26 @@ namespace vkcv { /** - * @brief Updates the position of the camera. + * @brief Updates the position of @p camera. + * @param[in] camera The camera object. + * @param[in] camera The camera object. * @return The updated camera position. */ glm::vec3 updatePosition(Camera &camera); /** - * @brief Updates the view matrix of the camera. + * @brief Updates the view matrix of @p camera. + * @param[in] camera The camera object. * @return The updated view matrix of the camera. */ glm::mat4 updateView(Camera &camera); /** - * @brief Updates the current radius in respect to the @p offset. - * @param offset The offset between the old and new radius. + * @brief Updates the current radius of @p camera in respect to the @p offset. + * @param[in] offset The offset between the old and new radius. + * @param[in] camera The camera object. */ - void updateRadius(double offset); + void updateRadius(double offset, Camera &camera); public: @@ -48,22 +52,24 @@ namespace vkcv { /** * @brief Sets @p radius as the new radius for orbiting around the camera's center point. - * @param radius The new radius. + * @param[in] radius The new radius. */ void setRadius(const float radius); /** - * @brief Pans the view of the camera according to the pitch and yaw values and additional offsets @p xOffset + * @brief Pans the view of @p camera according to the pitch and yaw values and additional offsets @p xOffset * and @p yOffset. * @param[in] xOffset The offset added to the yaw value. * @param[in] yOffset The offset added to the pitch value. + * @param[in] camera The camera object. */ void panView(double xOffset, double yOffset, Camera &camera); /** - * @brief Updates the camera object in respect to @p deltaTime. - * @param deltaTime The time that has passed since last update. - */ + * @brief Updates @p camera in respect to @p deltaTime. + * @param[in] deltaTime The time that has passed since last update. + * @param[in] camera The camera object + */ void updateCamera(double deltaTime, Camera &camera); /** @@ -73,6 +79,7 @@ namespace vkcv { * @param[in] scancode The platform-specific scancode. * @param[in] action The key action. * @param[in] mods The modifier bits. + * @param[in] camera The camera object. */ void keyCallback(int key, int scancode, int action, int mods, Camera &camera); @@ -81,14 +88,16 @@ namespace vkcv { * of the camera object. * @param[in] offsetX The offset in horizontal direction. * @param[in] offsetY The offset in vertical direction. + * @param[in] camera The camera object. */ void scrollCallback(double offsetX, double offsetY, Camera &camera); /** * @brief A callback function for mouse movement events. Currently, this leads to panning the view of the * camera, if #mouseButtonCallback(int button, int action, int mods) enabled panning. - * @param[in] x The horizontal mouse position. - * @param[in] y The vertical mouse position. + * @param[in] xoffset The horizontal mouse position. + * @param[in] yoffset The vertical mouse position. + * @param[in] camera The camera object. */ void mouseMoveCallback(double xoffset, double yoffset, Camera &camera); @@ -98,6 +107,7 @@ namespace vkcv { * @param[in] button The mouse button. * @param[in] action The button action. * @param[in] mods The modifier bits. + * @param[in] camera The camera object. */ void mouseButtonCallback(int button, int action, int mods, Camera &camera); diff --git a/modules/camera/src/vkcv/camera/TrackballCameraController.cpp b/modules/camera/src/vkcv/camera/TrackballCameraController.cpp index e36d0c9583008bee3138fc6669587610fa9e8457..a9c83d0864030e9fa9bfd48b8a4028f7379ae304 100644 --- a/modules/camera/src/vkcv/camera/TrackballCameraController.cpp +++ b/modules/camera/src/vkcv/camera/TrackballCameraController.cpp @@ -6,7 +6,7 @@ namespace vkcv { TrackballCameraController::TrackballCameraController() { m_rotationActive = false; - m_radius = 3.0f; // TODO: Needs to be removed. Radius should only depend on camera + m_radius = 3.0f; m_cameraSpeed = 2.5f; m_scrollSensitivity = 0.2f; } @@ -53,7 +53,7 @@ namespace vkcv { glm::vec3 translate = glm::vec3(0.0f, 0.0f, m_radius); translate = glm::vec3(rotationX * glm::vec4(translate, 0.0f)); glm::vec3 center = camera.getCenter(); - glm::vec3 position = center +translate; + glm::vec3 position = center + translate; camera.setPosition(position); glm::vec3 up = glm::vec3(rotationX * glm::vec4(glm::vec3(0.0f, 1.0f, 0.0f), 0.0f)); camera.setUp(up); @@ -69,8 +69,11 @@ namespace vkcv { return camera.getView(); } - void TrackballCameraController::updateRadius(double offset) { - setRadius(m_radius - offset * m_scrollSensitivity); + void TrackballCameraController::updateRadius(double offset, Camera &camera) { + glm::vec3 cameraPosition = camera.getPosition(); + glm::vec3 cameraCenter = camera.getCenter(); + float radius = glm::length(cameraCenter - cameraPosition); // get current camera radius + setRadius(radius - offset * m_scrollSensitivity); } void TrackballCameraController::updateCamera(double deltaTime, Camera &camera) { @@ -80,7 +83,7 @@ namespace vkcv { void TrackballCameraController::keyCallback(int key, int scancode, int action, int mods, Camera &camera) {} void TrackballCameraController::scrollCallback(double offsetX, double offsetY, Camera &camera) { - updateRadius(offsetY); + updateRadius(offsetY, camera); } void TrackballCameraController::mouseMoveCallback(double xoffset, double yoffset, Camera &camera) {