Physics Simulation & Visualization Tool 0.1
A C++ physics simulation engine with real-time 3D visualization
Loading...
Searching...
No Matches
Camera.h
Go to the documentation of this file.
1#pragma once
2#include <glm/glm.hpp>
3
4enum class Movement {
7 LEFT,
8 RIGHT,
9};
10
11class SceneObject;
12
13class Camera {
14public: // TODO: make these not public
15 glm::vec3 position;
16 glm::vec3 front;
17 glm::vec3 up;
18 glm::vec3 right;
19 glm::vec3 worldUp;
20
21 double yaw = -90.0f;
22 double pitch = 0.0f;
23
24 static constexpr float kDefaultMovementSpeed = 3.0f;
25 static constexpr float kDefaultMouseSensitivity = 0.05f;
26 static constexpr float kDefaultFov = 45.0f;
27 static constexpr float kDefaultNearClip = 0.1f;
28 static constexpr float kDefaultFarClip = 300000.0f;
29
33
34 Camera(glm::vec3 initPosition);
35
36 glm::mat4 getViewMatrix() const;
37 glm::mat4 getRenderViewMatrix() const;
38 glm::mat4 getProjMatrix() const;
39
40 void setAspectRatio(float ratio) { aspectRatio = ratio; }
41 void setClipRange(float nearPlane, float farPlane);
42 void setView(const glm::vec3& newPosition, double newYaw, double newPitch);
43 void resetView(const glm::vec3& newPosition = glm::vec3(0.0f, 10.0f, 30.0f));
44
45 void setTarget(SceneObject* obj);
46 void focusOn(SceneObject* obj);
47 void clearTarget();
48 bool hasTarget() const { return targetObject != nullptr; }
49 const SceneObject* getTarget() const { return targetObject; }
50 void update(const glm::vec3* renderTargetPosition = nullptr);
51
52 void resetMouse();
53 void processMouseMovement(float xoffset, float yoffset);
54 void processScroll(float wheelSteps);
55
56 void processKeyboard(Movement direction, float deltaTime);
57
58 bool firstMouse = true;
59private:
60 void updateCameraVectors();
61
62 float aspectRatio = 16.0f / 9.0f;
63 float nearClip = kDefaultNearClip;
64 float farClip = kDefaultFarClip;
65 SceneObject* targetObject = nullptr;
66 glm::vec3 followOffset{20.0f, 15.0f, 30.0f};
67 glm::vec3 followPivot{0.0f};
68};
Movement
Definition Camera.h:4
float movementSpeed
Definition Camera.h:30
glm::vec3 position
Definition Camera.h:15
static constexpr float kDefaultFov
Definition Camera.h:26
glm::mat4 getProjMatrix() const
Definition Camera.cpp:46
void setView(const glm::vec3 &newPosition, double newYaw, double newPitch)
Definition Camera.cpp:63
void clearTarget()
Definition Camera.cpp:112
void update(const glm::vec3 *renderTargetPosition=nullptr)
Definition Camera.cpp:118
glm::mat4 getViewMatrix() const
Definition Camera.cpp:38
void setClipRange(float nearPlane, float farPlane)
Definition Camera.cpp:58
void processKeyboard(Movement direction, float deltaTime)
Definition Camera.cpp:192
float mouseSensitivity
Definition Camera.h:31
void processScroll(float wheelSteps)
Definition Camera.cpp:169
glm::vec3 up
Definition Camera.h:17
double pitch
Definition Camera.h:22
double yaw
Definition Camera.h:21
glm::mat4 getRenderViewMatrix() const
Definition Camera.cpp:42
glm::vec3 front
Definition Camera.h:16
void resetView(const glm::vec3 &newPosition=glm::vec3(0.0f, 10.0f, 30.0f))
Definition Camera.cpp:74
const SceneObject * getTarget() const
Definition Camera.h:49
void processMouseMovement(float xoffset, float yoffset)
Definition Camera.cpp:134
glm::vec3 worldUp
Definition Camera.h:19
static constexpr float kDefaultNearClip
Definition Camera.h:27
bool hasTarget() const
Definition Camera.h:48
static constexpr float kDefaultFarClip
Definition Camera.h:28
void focusOn(SceneObject *obj)
Definition Camera.cpp:89
void setTarget(SceneObject *obj)
Definition Camera.cpp:78
static constexpr float kDefaultMouseSensitivity
Definition Camera.h:25
void setAspectRatio(float ratio)
Definition Camera.h:40
bool firstMouse
Definition Camera.h:58
glm::vec3 right
Definition Camera.h:18
static constexpr float kDefaultMovementSpeed
Definition Camera.h:24
void resetMouse()
Definition Camera.cpp:226
float fov
Definition Camera.h:32