Voltray Engine Docs
Loading...
Searching...
No Matches
BaseCamera.h
Go to the documentation of this file.
1#pragma once
2
3#include "../Math/Vec3.h"
4#include "../Math/Mat4.h"
5#include "../Math/Ray.h"
6#include <memory>
7#include <string>
8
9// Forward declaration
10class CameraAnimator;
11
16enum class CameraType
17{
20};
21
34{
35public:
43 BaseCamera(const std::string &name, float aspect, float nearPlane, float farPlane);
46 virtual ~BaseCamera();
47
48 // Pure virtual methods that must be implemented by derived classes
49 virtual Mat4 GetProjectionMatrix() const = 0;
50 virtual CameraType GetType() const = 0;
51 virtual std::string GetTypeName() const = 0;
52 virtual Ray ScreenToWorldRay(float screenX, float screenY) const = 0;
53
54 // Common camera operations
55 virtual Mat4 GetViewMatrix() const;
56 virtual Mat4 GetViewProjectionMatrix() const;
57
58 // Position and orientation
59 virtual void SetPosition(const Vec3 &position);
60 virtual void SetTarget(const Vec3 &target);
61 virtual void SetUp(const Vec3 &up);
62 virtual void LookAt(const Vec3 &position, const Vec3 &target, const Vec3 &up);
63
64 // Properties
65 virtual void SetAspectRatio(float aspect);
66 virtual void SetClippingPlanes(float nearPlane, float farPlane);
67 virtual void SetName(const std::string &name);
68
69 // Getters
70 const Vec3 &GetPosition() const { return m_Position; }
71 const Vec3 &GetTarget() const { return m_Target; }
72 const Vec3 &GetUp() const { return m_Up; }
73 Vec3 GetForward() const { return (m_Target - m_Position).Normalize(); }
74 Vec3 GetRight() const { return GetForward().Cross(m_Up).Normalize(); }
75 float GetAspectRatio() const { return m_Aspect; }
76 float GetNearPlane() const { return m_Near; }
77 float GetFarPlane() const { return m_Far; }
78 const std::string &GetName() const { return m_Name; }
79
80 // Input handling (can be overridden by derived classes)
81 virtual void Update();
82 virtual void ProcessInput();
83 virtual void SetInputEnabled(bool enabled);
84 virtual void SetMouseMovementActive(bool active); // New method
85 virtual bool IsInputEnabled() const { return m_InputEnabled; }
86
87 // Viewport bounds for input constraint
88 virtual void SetViewportBounds(float x, float y, float width, float height);
89 virtual bool IsMouseInViewport() const; // Animation/interpolation support for future scene object integration
90 virtual void SetTransform(const Mat4 &transform);
91 virtual Mat4 GetTransform() const;
92
93 // Camera animation methods
94 virtual void FocusOnObjectSmooth(const Vec3 &objectPosition, float duration = 1.0f);
95 virtual CameraAnimator &GetAnimator();
96 virtual bool IsAnimating() const;
97
98 // Factory method for creating cameras
99 static std::unique_ptr<BaseCamera> Create(CameraType type, const std::string &name = "",
100 float aspect = 16.0f / 9.0f, float nearPlane = 0.1f, float farPlane = 1000.0f);
101
102protected:
103 // Core camera properties
104 std::string m_Name;
105 Vec3 m_Position{0.0f, 0.0f, 3.0f};
106 Vec3 m_Target{0.0f, 0.0f, 0.0f};
107 Vec3 m_Up{0.0f, 1.0f, 0.0f};
108 float m_Aspect;
109 float m_Near;
110 float m_Far;
111
112 // Input handling
113 bool m_InputEnabled = true;
114 bool m_isMouseMovementActive = true; // New member
115 float m_MouseSensitivity = 0.1f;
116 float m_ZoomSpeed = 1.0f;
117 bool m_CursorHidden = false;
118
119 // Camera orbit parameters (similar to original Camera.cpp)
120 float m_Yaw = -90.0f;
121 float m_Pitch = 0.0f;
122 float m_Distance = 3.0f;
123
124 // Viewport bounds for input checking
125 float m_ViewportX = 0.0f;
126 float m_ViewportY = 0.0f;
127 float m_ViewportWidth = 0.0f;
128 float m_ViewportHeight = 0.0f;
129
130 // Helper methods for input handling
131 virtual void ProcessMouseInput();
132 virtual void ProcessKeyboardInput();
133 virtual void ProcessScrollInput();
134
135 // Camera orbit methods (similar to original Camera.cpp)
136 virtual void UpdatePositionFromAngles();
137 virtual void UpdateAnglesFromPosition();
138 virtual void Zoom(float delta);
139
140 // Focus functionality
141 virtual void FocusOnObject(const Vec3 &objectPosition); // Utility methods
142 void UpdateViewMatrix() const;
143
144 // Camera animation
145 std::unique_ptr<CameraAnimator> m_Animator;
146
147 // Cached matrices (mutable for lazy evaluation)
149 mutable bool m_ViewMatrixDirty = true;
150};
CameraType
Enumeration of all supported camera types.
Definition BaseCamera.h:17
Abstract base class for all camera types.
Definition BaseCamera.h:34
virtual void SetTransform(const Mat4 &transform)
Definition BaseCamera.cpp:144
virtual Mat4 GetViewProjectionMatrix() const
Definition BaseCamera.cpp:43
float GetFarPlane() const
Definition BaseCamera.h:77
virtual void UpdatePositionFromAngles()
Definition BaseCamera.cpp:331
Vec3 GetRight() const
Definition BaseCamera.h:74
virtual void ProcessKeyboardInput()
Definition BaseCamera.cpp:266
virtual ~BaseCamera()
Virtual destructor.
static std::unique_ptr< BaseCamera > Create(CameraType type, const std::string &name="", float aspect=16.0f/9.0f, float nearPlane=0.1f, float farPlane=1000.0f)
Definition BaseCamera.cpp:365
const Vec3 & GetUp() const
Definition BaseCamera.h:72
virtual CameraAnimator & GetAnimator()
Definition BaseCamera.cpp:389
float m_ViewportX
Definition BaseCamera.h:125
virtual void FocusOnObject(const Vec3 &objectPosition)
Definition BaseCamera.cpp:353
float m_MouseSensitivity
Definition BaseCamera.h:115
std::string m_Name
Definition BaseCamera.h:104
virtual void ProcessMouseInput()
Definition BaseCamera.cpp:193
bool m_isMouseMovementActive
Definition BaseCamera.h:114
virtual void FocusOnObjectSmooth(const Vec3 &objectPosition, float duration=1.0f)
Definition BaseCamera.cpp:381
Mat4 m_ViewMatrix
Definition BaseCamera.h:148
float GetAspectRatio() const
Definition BaseCamera.h:75
float m_ZoomSpeed
Definition BaseCamera.h:116
float m_Yaw
Definition BaseCamera.h:120
float m_ViewportY
Definition BaseCamera.h:126
float m_Pitch
Definition BaseCamera.h:121
bool m_ViewMatrixDirty
Definition BaseCamera.h:149
virtual bool IsMouseInViewport() const
Definition BaseCamera.cpp:129
virtual Mat4 GetTransform() const
Definition BaseCamera.cpp:159
virtual void SetClippingPlanes(float nearPlane, float farPlane)
Definition BaseCamera.cpp:83
virtual Ray ScreenToWorldRay(float screenX, float screenY) const =0
virtual std::string GetTypeName() const =0
virtual void SetInputEnabled(bool enabled)
Definition BaseCamera.cpp:116
std::unique_ptr< CameraAnimator > m_Animator
Definition BaseCamera.h:145
virtual Mat4 GetViewMatrix() const
Definition BaseCamera.cpp:34
Vec3 m_Up
Definition BaseCamera.h:107
float m_Aspect
Definition BaseCamera.h:108
void UpdateViewMatrix() const
Definition BaseCamera.cpp:308
virtual bool IsAnimating() const
Definition BaseCamera.cpp:394
float m_Far
Definition BaseCamera.h:110
virtual void ProcessScrollInput()
Definition BaseCamera.cpp:300
virtual void UpdateAnglesFromPosition()
Definition BaseCamera.cpp:343
float m_Near
Definition BaseCamera.h:109
virtual void SetMouseMovementActive(bool active)
Definition BaseCamera.cpp:29
virtual CameraType GetType() const =0
virtual void SetAspectRatio(float aspect)
Definition BaseCamera.cpp:78
virtual void SetPosition(const Vec3 &position)
Definition BaseCamera.cpp:48
bool m_InputEnabled
Definition BaseCamera.h:113
float m_Distance
Definition BaseCamera.h:122
const Vec3 & GetTarget() const
Definition BaseCamera.h:71
const Vec3 & GetPosition() const
Definition BaseCamera.h:70
float m_ViewportHeight
Definition BaseCamera.h:128
Vec3 m_Position
Definition BaseCamera.h:105
float GetNearPlane() const
Definition BaseCamera.h:76
virtual void SetUp(const Vec3 &up)
Definition BaseCamera.cpp:64
virtual void Zoom(float delta)
Definition BaseCamera.cpp:314
virtual void SetViewportBounds(float x, float y, float width, float height)
Definition BaseCamera.cpp:121
virtual void SetName(const std::string &name)
Definition BaseCamera.cpp:89
virtual Mat4 GetProjectionMatrix() const =0
const std::string & GetName() const
Definition BaseCamera.h:78
virtual bool IsInputEnabled() const
Definition BaseCamera.h:85
Vec3 GetForward() const
Definition BaseCamera.h:73
Vec3 m_Target
Definition BaseCamera.h:106
virtual void ProcessInput()
Definition BaseCamera.cpp:109
virtual void SetTarget(const Vec3 &target)
Definition BaseCamera.cpp:56
float m_ViewportWidth
Definition BaseCamera.h:127
bool m_CursorHidden
Definition BaseCamera.h:117
virtual void Update()
Definition BaseCamera.cpp:94
virtual void LookAt(const Vec3 &position, const Vec3 &target, const Vec3 &up)
Definition BaseCamera.cpp:70
Handles smooth camera transitions and animations.
Definition CameraAnimator.h:18
4x4 Matrix structure for 3D transformations and projections.
Definition Mat4.h:16
Represents a ray in 3D space with an origin and direction.
Definition Ray.h:15
Definition Vec3.h:5
Vec3 Normalize() const
Definition vec3.cpp:39
Vec3 Cross(const Vec3 &other) const
Definition vec3.cpp:52