Verified Commit 2568c8c2 authored by Josch Morgenstern's avatar Josch Morgenstern
Browse files

[#42] remove window and camera from TrackballCameraController

parent 0f9d1e87
Pipeline #25699 passed with stages
in 2 minutes and 49 seconds
......@@ -20,13 +20,13 @@ namespace vkcv {
* @brief Updates the position of the camera.
* @return The updated camera position.
*/
glm::vec3 updatePosition();
glm::vec3 updatePosition(Camera &camera);
/**
* @brief Updates the view matrix of the camera.
* @return The updated view matrix of the camera.
*/
glm::mat4 updateView();
glm::mat4 updateView(Camera &camera);
/**
* @brief Updates the current radius in respect to the @p offset.
......@@ -58,13 +58,13 @@ namespace vkcv {
* @param[in] xOffset The offset added to the yaw value.
* @param[in] yOffset The offset added to the pitch value.
*/
void panView(double xOffset, double yOffset);
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.
*/
void updateCamera(double deltaTime);
void updateCamera(double deltaTime, Camera &camera);
/**
* @brief A callback function for key events. Currently, the trackball camera does not support camera movement.
......@@ -74,7 +74,7 @@ namespace vkcv {
* @param[in] action The key action.
* @param[in] mods The modifier bits.
*/
void keyCallback(int key, int scancode, int action, int mods);
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
......@@ -82,7 +82,7 @@ namespace vkcv {
* @param[in] offsetX The offset in horizontal direction.
* @param[in] offsetY The offset in vertical direction.
*/
void scrollCallback(double offsetX, double offsetY);
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
......@@ -90,7 +90,7 @@ namespace vkcv {
* @param[in] x The horizontal mouse position.
* @param[in] y The vertical mouse position.
*/
void mouseMoveCallback(double x, double y);
void mouseMoveCallback(double xoffset, double yoffset, Camera &camera);
/**
* @brief A callback function for mouse button events. Currently, the right mouse button enables panning the
......@@ -99,7 +99,7 @@ namespace vkcv {
* @param[in] action The button action.
* @param[in] mods The modifier bits.
*/
void mouseButtonCallback(int button, int action, int mods);
void mouseButtonCallback(int button, int action, int mods, Camera &camera);
};
......
......@@ -6,7 +6,7 @@ namespace vkcv {
TrackballCameraController::TrackballCameraController() {
m_rotationActive = false;
m_radius = 3.0f;
m_radius = 3.0f; // TODO: Needs to be removed. Radius should only depend on camera
m_cameraSpeed = 2.5f;
m_scrollSensitivity = 0.2f;
}
......@@ -20,31 +20,31 @@ namespace vkcv {
}
}
void TrackballCameraController::panView(double xOffset, double yOffset) {
void TrackballCameraController::panView(double xOffset, double yOffset, Camera &camera) {
// handle yaw rotation
float yaw = m_camera->getYaw() + xOffset * m_cameraSpeed;
float yaw = camera.getYaw() + xOffset * m_cameraSpeed;
if (yaw < 0.0f) {
yaw += 360.0f;
}
else if (yaw > 360.0f) {
yaw -= 360.0f;
}
m_camera->setYaw(yaw);
camera.setYaw(yaw);
// handle pitch rotation
float pitch = m_camera->getPitch() + yOffset * m_cameraSpeed;
float pitch = camera.getPitch() + yOffset * m_cameraSpeed;
if (pitch < 0.0f) {
pitch += 360.0f;
}
else if (pitch > 360.0f) {
pitch -= 360.0f;
}
m_camera->setPitch(pitch);
camera.setPitch(pitch);
}
glm::vec3 TrackballCameraController::updatePosition() {
float yaw = m_camera->getYaw();
float pitch = m_camera->getPitch();
glm::vec3 TrackballCameraController::updatePosition(Camera &camera) {
float yaw = camera.getYaw();
float pitch = camera.getPitch();
glm::vec3 yAxis = glm::vec3(0.0f, 1.0f, 0.0f);
glm::vec3 xAxis = glm::vec3(1.0f, 0.0f, 0.0f);
......@@ -52,44 +52,38 @@ namespace vkcv {
glm::mat4 rotationX = glm::rotate(rotationY, glm::radians(pitch), xAxis);
glm::vec3 translate = glm::vec3(0.0f, 0.0f, m_radius);
translate = glm::vec3(rotationX * glm::vec4(translate, 0.0f));
glm::vec3 center = m_camera->getCenter();
glm::vec3 center = camera.getCenter();
glm::vec3 position = center +translate;
m_camera->setPosition(position);
camera.setPosition(position);
glm::vec3 up = glm::vec3(rotationX * glm::vec4(glm::vec3(0.0f, 1.0f, 0.0f), 0.0f));
m_camera->setUp(up);
camera.setUp(up);
return position;
}
glm::mat4 TrackballCameraController::updateView() {
updatePosition();
glm::vec3 position = m_camera->getPosition();
glm::vec3 center = m_camera->getCenter();
glm::vec3 up = m_camera->getUp();
m_camera->lookAt(position, center, up);
return m_camera->getView();
glm::mat4 TrackballCameraController::updateView(Camera &camera) {
updatePosition(camera);
glm::vec3 position = camera.getPosition();
glm::vec3 center = camera.getCenter();
glm::vec3 up = camera.getUp();
camera.lookAt(position, center, up);
return camera.getView();
}
void TrackballCameraController::updateRadius(double offset) {
setRadius(m_radius - offset * m_scrollSensitivity);
}
void TrackballCameraController::updateCamera(double deltaTime) {
updateView();
void TrackballCameraController::updateCamera(double deltaTime, Camera &camera) {
updateView(camera);
}
void TrackballCameraController::keyCallback(int key, int scancode, int action, int mods) {}
void TrackballCameraController::keyCallback(int key, int scancode, int action, int mods, Camera &camera) {}
void TrackballCameraController::scrollCallback(double offsetX, double offsetY) {
void TrackballCameraController::scrollCallback(double offsetX, double offsetY, Camera &camera) {
updateRadius(offsetY);
}
void TrackballCameraController::mouseMoveCallback(double x, double y) {
auto xoffset = static_cast<float>(x - m_lastX);
auto yoffset = static_cast<float>(y - m_lastY);
m_lastX = x;
m_lastY = y;
void TrackballCameraController::mouseMoveCallback(double xoffset, double yoffset, Camera &camera) {
if(!m_rotationActive){
return;
}
......@@ -98,16 +92,14 @@ namespace vkcv {
xoffset *= sensitivity;
yoffset *= sensitivity;
panView(xoffset , yoffset);
panView(xoffset , yoffset, camera);
}
void TrackballCameraController::mouseButtonCallback(int button, int action, int mods) {
void TrackballCameraController::mouseButtonCallback(int button, int action, int mods, Camera &camera) {
if(button == GLFW_MOUSE_BUTTON_2 && m_rotationActive == false && action == GLFW_PRESS){
glfwSetInputMode(m_window->getWindow(), GLFW_CURSOR, GLFW_CURSOR_DISABLED);
m_rotationActive = true;
}
else if(button == GLFW_MOUSE_BUTTON_2 && m_rotationActive == true && action == GLFW_RELEASE){
glfwSetInputMode(m_window->getWindow(), GLFW_CURSOR, GLFW_CURSOR_NORMAL);
m_rotationActive = false;
}
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment