From cde7490211250821edfb2a0c13e92311c3c4cd05 Mon Sep 17 00:00:00 2001 From: miaurizius Date: Mon, 27 Apr 2026 15:11:18 +0200 Subject: [PATCH] added floating camera --- CMakeLists.txt | 4 +++- include/camera/Floating_Camera.hpp | 12 ++++++++++++ src/camera/Floating_Camera.cpp | 8 ++++++++ src/main.cpp | 17 ++++++++++++++--- 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 include/camera/Floating_Camera.hpp create mode 100644 src/camera/Floating_Camera.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 95c0bc5..54b8966 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,9 @@ add_executable(${PROJECT_NAME} src/main.cpp src/camera/Camera.cpp src/camera/FPS_Camera.cpp src/glPipeline/IndexBuffer.cpp - src/glPipeline/VertexBuffer.cpp) + src/glPipeline/VertexBuffer.cpp + include/camera/Floating_Camera.hpp + src/camera/Floating_Camera.cpp) target_compile_definitions(${PROJECT_NAME} PRIVATE $<$:_DEBUG>) diff --git a/include/camera/Floating_Camera.hpp b/include/camera/Floating_Camera.hpp new file mode 100644 index 0000000..2e88b23 --- /dev/null +++ b/include/camera/Floating_Camera.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include "FPS_Camera.hpp" + +class FloatingCamera : public FPSCamera { +private: + +public: + FloatingCamera(float fov, float width, float height); + + void moveUp(float amount); +}; \ No newline at end of file diff --git a/src/camera/Floating_Camera.cpp b/src/camera/Floating_Camera.cpp new file mode 100644 index 0000000..95f0797 --- /dev/null +++ b/src/camera/Floating_Camera.cpp @@ -0,0 +1,8 @@ +#include "camera/Floating_Camera.hpp" + +FloatingCamera::FloatingCamera(float fov, float width, float height) : FPSCamera(fov, width, height) { +} + +void FloatingCamera::moveUp(float amount) { + translate(up * amount); +} diff --git a/src/main.cpp b/src/main.cpp index c78a6e2..82dc63e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,9 +7,8 @@ #include "defines.hpp" #include "Shader.hpp" #define STB_IMAGE_IMPLEMENTATION -#include "camera/Camera.hpp" #include "stb_image.hpp" -#include "camera/FPS_Camera.hpp" +#include "camera/Floating_Camera.hpp" #include "glm/glm.hpp" #include "glm/ext/matrix_transform.hpp" #include "glm/gtc/matrix_transform.hpp" @@ -172,7 +171,7 @@ int main() { auto model = glm::mat4(1.0f); model = glm::scale(model, glm::vec3(1.2f)); - FPSCamera camera(90.0f, 800.0f, 600.0f); + FloatingCamera camera(90.0f, 800.0f, 600.0f); camera.translate(glm::vec3(0.0f, 0.0f, 5.0f)); camera.update(); @@ -193,6 +192,8 @@ int main() { bool btnS; bool btnA; bool btnD; + bool btnSpace; + bool btnShift; while (running) { while (SDL_PollEvent(&e)) { @@ -204,6 +205,8 @@ int main() { case SDLK_S: btnS = true; break; case SDLK_A: btnA = true; break; case SDLK_D: btnD = true; break; + case SDLK_SPACE: btnSpace = true; break; + case SDLK_LSHIFT: btnShift = true; break; default: break; } } else if (e.type == SDL_EVENT_KEY_UP) { @@ -212,6 +215,8 @@ int main() { case SDLK_S: btnS = false; break; case SDLK_A: btnA = false; break; case SDLK_D: btnD = false; break; + case SDLK_SPACE: btnSpace = false; break; + case SDLK_LSHIFT: btnShift = false; break; default: break; } } else if (e.type == SDL_EVENT_MOUSE_MOTION) { @@ -235,6 +240,12 @@ int main() { if (btnD) { camera.moveSideways(delta * cameraSpeed); } + if (btnSpace) { + camera.moveUp(delta * cameraSpeed); + } + if (btnShift) { + camera.moveUp(- delta * cameraSpeed); + } camera.update();