diff options
| author | hachem <im@hachem.wtf> | 2025-08-15 03:18:29 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-08-15 03:18:29 +0200 |
| commit | 4172869e54093eee6e1595ebe0fa55c9fe98aef7 (patch) | |
| tree | 2004c518688e6db529e437fe3f0120ad0fcc1dd9 /src/Core/Camera.h | |
| parent | bc2d88c799cb3913a5defe4ea9ddea9c56814349 (diff) | |
[help]: Complete first geodesic 3d raytracing
Diffstat (limited to 'src/Core/Camera.h')
| -rw-r--r-- | src/Core/Camera.h | 83 |
1 files changed, 37 insertions, 46 deletions
diff --git a/src/Core/Camera.h b/src/Core/Camera.h index 7fe3bd9..a049d06 100644 --- a/src/Core/Camera.h +++ b/src/Core/Camera.h @@ -2,7 +2,6 @@ #include <glm/glm.hpp> #include <glm/gtc/matrix_transform.hpp> -#include <GLFW/glfw3.h> #define _USE_MATH_DEFINES #ifndef M_PI @@ -24,7 +23,6 @@ namespace Donut float nearPlane = 0.1f, float farPlane = 100.0f); ~Camera() = default; - // FPS Camera Methods void SetPosition(const glm::vec3& position) { m_Position = position; RecalculateViewMatrix(); } void SetRotation(const glm::vec3& rotation) { m_Rotation = rotation; RecalculateViewMatrix(); } @@ -55,21 +53,23 @@ namespace Donut void SetMovementSpeed(float speed) { m_MovementSpeed = speed; } float GetMovementSpeed() const { return m_MovementSpeed; } - // Orbital Camera Methods - void SetOrbitalMode(bool enabled); - bool IsOrbitalMode() const { return m_CameraMode == CameraMode::Orbital; } + void SetOrbitalTarget(const glm::vec3& target) { m_OrbitalTarget = target; } + const glm::vec3& GetOrbitalTarget() const { return m_OrbitalTarget; } - void SetTarget(const glm::vec3& target) { m_Target = target; } - const glm::vec3& GetTarget() const { return m_Target; } + void SetOrbitalRadius(double radius) { m_OrbitalRadius = radius; } + double GetOrbitalRadius() const { return m_OrbitalRadius; } - void SetRadius(double radius) { m_Radius = radius; } - double GetRadius() const { return m_Radius; } + void SetOrbitalLimits(double minRadius, double maxRadius) + { + m_OrbitalMinRadius = minRadius; + m_OrbitalMaxRadius = maxRadius; + } - void SetMinRadius(double minRadius) { m_MinRadius = minRadius; } - double GetMinRadius() const { return m_MinRadius; } + void SetOrbitalSpeed(float speed) { m_OrbitalSpeed = speed; } + float GetOrbitalSpeed() const { return m_OrbitalSpeed; } - void SetMaxRadius(double maxRadius) { m_MaxRadius = maxRadius; } - double GetMaxRadius() const { return m_MaxRadius; } + void SetZoomSpeed(double speed) { m_ZoomSpeed = speed; } + double GetZoomSpeed() const { return m_ZoomSpeed; } void SetAzimuth(float azimuth) { m_Azimuth = azimuth; } float GetAzimuth() const { return m_Azimuth; } @@ -77,35 +77,27 @@ namespace Donut void SetElevation(float elevation) { m_Elevation = elevation; } float GetElevation() const { return m_Elevation; } - void SetOrbitSpeed(float orbitSpeed) { m_OrbitSpeed = orbitSpeed; } - float GetOrbitSpeed() const { return m_OrbitSpeed; } - - void SetZoomSpeed(double zoomSpeed) { m_ZoomSpeed = zoomSpeed; } - double GetZoomSpeed() const { return m_ZoomSpeed; } - - // Orbital camera position calculation glm::vec3 GetOrbitalPosition() const; - - // Input handling for orbital camera + void UpdateOrbital(); void ProcessOrbitalMouseMove(double x, double y); void ProcessOrbitalMouseButton(int button, int action, int mods); void ProcessOrbitalScroll(double xoffset, double yoffset); - // State management - bool IsDragging() const { return m_Dragging; } - bool IsPanning() const { return m_Panning; } - bool IsMoving() const { return m_Moving; } + void SetCameraMode(CameraMode mode) { m_CameraMode = mode; } + CameraMode GetCameraMode() const { return m_CameraMode; } + + bool IsDragging() const { return m_Dragging; } + bool IsPanning() const { return m_Panning; } + bool IsMoving() const { return m_Moving; } + double GetLastX() const { return m_LastX; } + double GetLastY() const { return m_LastY; } private: void RecalculateViewMatrix(); void RecalculateProjectionMatrix(); - void UpdateOrbitalState(); - private: - // Camera mode CameraMode m_CameraMode = CameraMode::FPS; - - // FPS Camera members + glm::mat4 m_ProjectionMatrix; glm::mat4 m_ViewMatrix; glm::mat4 m_ViewProjectionMatrix; @@ -123,20 +115,19 @@ namespace Donut bool m_FirstMouse = true; float m_LastX = 0.0f; float m_LastY = 0.0f; - - // Orbital Camera members - glm::vec3 m_Target = glm::vec3(0.0f, 0.0f, 0.0f); - double m_Radius = 6.34194e10; - double m_MinRadius = 1e10; - double m_MaxRadius = 1e12; - float m_Azimuth = 0.0f; - float m_Elevation = static_cast<float>(M_PI) / 2.0f; - float m_OrbitSpeed = 0.01f; - double m_ZoomSpeed = 25e9f; - bool m_Dragging = false; - bool m_Panning = false; - bool m_Moving = false; - double m_OrbitalLastX = 0.0; - double m_OrbitalLastY = 0.0; + + glm::vec3 m_OrbitalTarget = glm::vec3(0.0f, 0.0f, 0.0f); + double m_OrbitalRadius = 6.34194e10; + double m_OrbitalMinRadius = 1e10; + double m_OrbitalMaxRadius = 1e12; + float m_Azimuth = 0.0f; + float m_Elevation = static_cast<float>(M_PI) / 2.0f; + float m_OrbitalSpeed = 0.01f; + double m_ZoomSpeed = 25e9f; + bool m_Dragging = false; + bool m_Panning = false; + bool m_Moving = false; + double m_LastX_Orbital = 0.0; + double m_LastY_Orbital = 0.0; }; } |
