HPC_Voxel_Engine 0.2.0
High-Performance C++ Voxel Engine
Loading...
Searching...
No Matches
camera.h
Go to the documentation of this file.
1#pragma once
2#include <cmath>
3#include "MathUtils.h"
4#include "Matrix.h"
5
6namespace Core {
7
8// Default Camera Values
9constexpr float YAW = -90.0f;
10constexpr float PITCH = 0.0f;
11constexpr float SPEED = 2.5f;
12constexpr float SENSITIVITY = 0.1f;
13constexpr float ZOOM = 45.0f;
14constexpr float PI = 3.1415926535f;
15
21class Camera {
22public:
28 Camera(Vec3 startPos = Vec3(0.0f, 0.0f, 0.0f), Vec3 startUP = Vec3(0.0f, 1.0f, 0.0f))
29 : m_objPtPosition(startPos), m_objVecFront(Vec3(0.0f, 0.0f, -1.0f)), m_objWorldUp(startUP) {
31 }
32
39
40 // --- Input Processing ---
41
48 void ProcessKeyboard(int iDirection, float fDeltaTime) {
49 float velocity = m_fSpeed * fDeltaTime;
50 if (iDirection == 0)
51 m_objPtPosition += m_objVecFront * velocity; // FORWARD
52 if (iDirection == 1)
53 m_objPtPosition -= m_objVecFront * velocity; // BACKWARD
54 if (iDirection == 2)
55 m_objPtPosition -= m_objVecRight * velocity; // LEFT
56 if (iDirection == 3)
57 m_objPtPosition += m_objVecRight * velocity; // RIGHT
58 if (iDirection == 4)
59 m_objPtPosition += m_objVecUp * velocity; // UP (Fly)
60 if (iDirection == 5)
61 m_objPtPosition -= m_objVecUp * velocity; // DOWN (Fly)
62 }
63
70 void ProcessMouseMovement(float fXOffset, float fYOffset, bool bConstrainPitch = true) {
71 fXOffset *= m_fSensitivity;
72 fYOffset *= m_fSensitivity;
73
74 m_fYaw += fXOffset;
75 m_fPitch += fYOffset;
76
77 if (bConstrainPitch) {
78 if (m_fPitch > 89.0f)
79 m_fPitch = 89.0f;
80 if (m_fPitch < -89.0f)
81 m_fPitch = -89.0f;
82 }
83
85 }
86
90 void ProcessMousePan(float fXOffset, float fYOffset) {
91 constexpr float fPanSpeed = 0.02f;
92 m_objPtPosition -= m_objVecRight * (fXOffset * fPanSpeed);
93 m_objPtPosition -= m_objVecUp * (fYOffset * fPanSpeed);
94 }
95
99 void ProcessMouseScroll(float fYOffset) {
100 m_fZoom -= fYOffset;
101 if (m_fZoom < 1.0f)
102 m_fZoom = 1.0f;
103 if (m_fZoom > 90.0f)
104 m_fZoom = 90.0f;
105 }
106
107 // --- Getters & Setters ---
108
109 Vec3 GetUp() const { return m_objVecUp; }
110 Vec3 GetFront() const { return m_objVecFront; }
111 Vec3 GetRight() const { return m_objVecRight; }
113 float GetZoom() const { return m_fZoom; }
114
115 void SetCameraPosition(const Vec3& position) { m_objPtPosition = position; }
116 void SetCameraFront(const Vec3& front) { m_objVecFront = front.normalize(); }
117 void SetCameraZoom(float zoom) { m_fZoom = zoom; }
118
119 void SetCameraYawPitch(float yaw, float pitch) {
120 m_fYaw = yaw;
121 m_fPitch = pitch;
123 }
124
129 Vec3 fwd;
130 fwd.x = std::cos(m_fYaw * PI / 180.0f) * std::cos(m_fPitch * PI / 180.0f);
131 fwd.y = std::sin(m_fPitch * PI / 180.0f);
132 fwd.z = std::sin(m_fYaw * PI / 180.0f) * std::cos(m_fPitch * PI / 180.0f);
133 m_objVecFront = fwd.normalize();
134 // Gram-Schmidt process
137 }
138
139private:
140 // Camera Attributes
146
147 // Euler Angles
148 float m_fYaw = YAW;
150
151 // Options
152 float m_fZoom = ZOOM;
153
156};
157} // namespace Core
Processes input and calculates the View Matrix for OpenGL rendering.
Definition camera.h:21
Vec3 m_objVecRight
Definition camera.h:144
float m_fPitch
Definition camera.h:149
Mat4 GetViewMatrix()
Calculates the LookAt View Matrix.
Definition camera.h:36
Vec3 GetCameraPosition() const
Definition camera.h:112
Vec3 GetUp() const
Definition camera.h:109
Vec3 m_objPtPosition
Definition camera.h:141
Vec3 m_objVecUp
Definition camera.h:143
Vec3 GetFront() const
Definition camera.h:110
void UpdateCameraVectors()
Recalculates Front, Right, and Up vectors from Euler angles.
Definition camera.h:128
void ProcessKeyboard(int iDirection, float fDeltaTime)
Moves the camera based on keyboard input direction.
Definition camera.h:48
void SetCameraFront(const Vec3 &front)
Definition camera.h:116
float m_fYaw
Definition camera.h:148
Vec3 m_objVecFront
Definition camera.h:142
Camera(Vec3 startPos=Vec3(0.0f, 0.0f, 0.0f), Vec3 startUP=Vec3(0.0f, 1.0f, 0.0f))
Constructs the camera at a specific position.
Definition camera.h:28
float m_fSensitivity
Definition camera.h:155
void ProcessMouseMovement(float fXOffset, float fYOffset, bool bConstrainPitch=true)
Rotates the camera based on mouse movement.
Definition camera.h:70
void SetCameraZoom(float zoom)
Definition camera.h:117
float GetZoom() const
Definition camera.h:113
Vec3 GetRight() const
Definition camera.h:111
void ProcessMouseScroll(float fYOffset)
Zooms (changes FOV) based on scroll wheel.
Definition camera.h:99
float m_fZoom
Definition camera.h:152
Vec3 m_objWorldUp
Definition camera.h:145
void SetCameraYawPitch(float yaw, float pitch)
Definition camera.h:119
void ProcessMousePan(float fXOffset, float fYOffset)
Pans the camera (Editor style movement).
Definition camera.h:90
float m_fSpeed
Definition camera.h:154
void SetCameraPosition(const Vec3 &position)
Definition camera.h:115
Definition camera.h:6
constexpr float YAW
Definition camera.h:9
constexpr float ZOOM
Definition camera.h:13
constexpr float PI
Definition camera.h:14
constexpr float PITCH
Definition camera.h:10
constexpr float SENSITIVITY
Definition camera.h:12
constexpr float SPEED
Definition camera.h:11
A 4x4 Matrix structure stored in Column-Major order (OpenGL Standard).
Definition Matrix.h:18
static Mat4 LookAt(const Vec3 &eye, const Vec3 &tgt, const Vec3 &up)
Creates a View Matrix using Eye, Target, and Up vectors.
Definition Matrix.h:106
A 3-component vector structure (x, y, z) with standard math operations.
Definition MathUtils.h:11
float x
Definition MathUtils.h:12
float z
Definition MathUtils.h:12
constexpr Vec3 cross(const Vec3 &other) const noexcept
Definition MathUtils.h:71
Vec3 normalize() const
Definition MathUtils.h:51
float y
Definition MathUtils.h:12