LesDingeriesDeDjalimSurOpenGL/include/Camera.h
Djalim Simaila 579d5ec483 Add camera system with FPS and Orbit support
Introduce Camera.h/cpp defining abstract Camera, FPSCamera, OrbitCamera.
Update engine.h to include Camera and window size fields.
Implement cameraUpdate in engine.cpp handling mouse movement and key input.
Add framebuffer size and scroll callbacks for viewport resizing and zoom.
Remove legacy loop files (cube, rainbowWindow, rbgTriangle).
Adjust main.cpp formatting.
Update onCreate to load objects with textures and transforms.
Modify onUpdate to use Camera's view/projection matrices instead of hardcoded values.
2025-10-28 13:09:06 +01:00

94 lines
2.3 KiB
C++

//-----------------------------------------------------------------------------
// Basic camera class including derived orbit-style and first person
// shooter (FPS) style camera support
//-----------------------------------------------------------------------------
#ifndef CAMERA_H
#define CAMERA_H
#include "glm/glm.hpp"
#include "glm/gtc/constants.hpp"
//--------------------------------------------------------------
// Abstract Camera Class
//--------------------------------------------------------------
class Camera
{
public:
glm::mat4 getViewMatrix() const;
virtual void setPosition(const glm::vec3& position) {}
virtual void rotate(float yaw, float pitch) {} // in degrees
virtual void move(const glm::vec3& offsetPos) {}
const glm::vec3& getLook() const;
const glm::vec3& getRight() const;
const glm::vec3& getUp() const;
const glm::vec3& getPosition() const;
float getFOV() const { return mFOV; }
void setFOV(float fov) { mFOV = fov; } // in degrees
protected:
Camera();
virtual void updateCameraVectors() {}
glm::vec3 mPosition;
glm::vec3 mTargetPos;
glm::vec3 mLook;
glm::vec3 mUp;
glm::vec3 mRight;
const glm::vec3 WORLD_UP;
// Euler Angles (in radians)
float mYaw;
float mPitch;
// Camera parameters
float mFOV; // degrees
};
//--------------------------------------------------------------
// FPS Camera Class
//--------------------------------------------------------------
class FPSCamera : public Camera
{
public:
FPSCamera(glm::vec3 position = glm::vec3(0.0f, 0.0f, 0.0f), float yaw = glm::pi<float>(), float pitch = 0.0f); // (yaw) initial angle faces -Z
virtual void setPosition(const glm::vec3& position);
virtual void rotate(float yaw, float pitch); // in degrees
virtual void move(const glm::vec3& offsetPos);
private:
void updateCameraVectors();
};
//--------------------------------------------------------------
// Orbit Camera Class
//--------------------------------------------------------------
class OrbitCamera : public Camera
{
public:
OrbitCamera();
virtual void rotate(float yaw, float pitch); // in degrees
// Camera Controls
void setLookAt(const glm::vec3& target);
void setRadius(float radius);
private:
void updateCameraVectors();
// Camera parameters
float mRadius;
};
#endif //CAMERA_H