mirror of
https://github.com/guezoloic/LearnOpenGL.git
synced 2026-01-25 09:34:16 +00:00
This commit refactors the Camera class to add clarity and better logic: - Integrates variables directly from constructor to the header for cleaner code - Adds getters and setters for fov, speed, cameraSensitivity and position - Duplicates projection matrix from cube to camera - Adds comments to the header file - TODO: the projection matrix from the cube loop function must now be replaced by the call to the `glm::mat4 getProjectionMatrix()` camera function
69 lines
1.7 KiB
C++
Executable File
69 lines
1.7 KiB
C++
Executable File
#ifndef CAMERA_HPP
|
|
#define CAMERA_HPP
|
|
|
|
#include "glm/glm.hpp"
|
|
#include "glm/gtc/matrix_transform.hpp"
|
|
|
|
struct GLFWwindow;
|
|
|
|
class Camera
|
|
{
|
|
private:
|
|
int width;
|
|
int height;
|
|
|
|
double mousePosX;
|
|
double mousePosY;
|
|
// first mouse detection
|
|
bool firstMouse = true;
|
|
|
|
float cameraYaw = -90.f; // horizontal angle
|
|
float cameraPitch = 10.f; // vertical angle
|
|
|
|
// front camera vector (where the camera is pointed.)
|
|
glm::vec3 cameraFront = glm::vec3(0.f, 0.f, -1.f);
|
|
// up world vector (absolute up pos)
|
|
glm::vec3 worldUp = glm::vec3(0.f, 1.f, 0.f);
|
|
|
|
// up camera vector (relative up from the camera)
|
|
glm::vec3 cameraUp;
|
|
// right camera vector (relative right from the camera)
|
|
glm::vec3 cameraRight;
|
|
|
|
// camera position
|
|
glm::vec3 cameraPosition = glm::vec3(0.f, 0.f, 0.f);
|
|
|
|
// glfw window
|
|
GLFWwindow* window;
|
|
|
|
float speed = 3.f; // move speed
|
|
float cameraSensitivity; // mouse sensitivity
|
|
float fov = 45.f; // Field Of View
|
|
|
|
void processInput(float deltaTime);
|
|
void processMouseMovement();
|
|
void updateCameraVectors();
|
|
|
|
public:
|
|
Camera(int width, int height, GLFWwindow* window, float sensitivity);
|
|
|
|
void update(float deltaTime);
|
|
|
|
// view matrix
|
|
glm::mat4 getViewMatrix() const;
|
|
// projection matrix
|
|
glm::mat4 getProjectionMatrix() const;
|
|
|
|
float getFov() const { return fov; }
|
|
float getSpeed() const { return speed; }
|
|
float getCameraSensitivity() const { return cameraSensitivity; }
|
|
glm::vec3 getPosition() const { return cameraPosition; }
|
|
|
|
void setSpeed(float newSpeed);
|
|
void setCameraSensitivity(float newSensitivity);
|
|
void setFov(float newFov);
|
|
void setPosition(const glm::vec3& newPosition);
|
|
};
|
|
|
|
#endif
|