#pragma once #include #include #include enum CameraMovement { FORWARD, BACKWARD, LEFT, RIGHT, UP, DOWN }; const float YAW = -90.0f; const float PITCH = 0.0f; const float SPEED = 2.5f; const float SENSITIVITY = 0.1f; const float ZOOM = 45.0f; class Camera { public: // Camera Attributes glm::vec3 Position; glm::vec3 Front; glm::vec3 Up; glm::vec3 Right; glm::vec3 WorldUp; // Euler Angles float Yaw; float Pitch; // Camera options float MovementSpeed; float MouseSensitivity; float Zoom; Camera(glm::vec3 position = glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3 up = glm::vec3(0.0f, 1.0f, 0.0f), float yaw = YAW, float pitch = PITCH) : Front(glm::vec3(0.0f, 0.0f, -1.0f)), MovementSpeed(SPEED), MouseSensitivity(SENSITIVITY), Zoom(ZOOM) { Position = position; WorldUp = up; Yaw = yaw; Pitch = pitch; UpdateCameraVectors(); } Camera(float posX, float posY, float posZ, float upX, float upY, float upZ, float yaw, float pitch) : Front(glm::vec3(0.0f, 0.0f, -1.0f)), MovementSpeed(SPEED), MouseSensitivity(SENSITIVITY), Zoom(ZOOM) { Position = glm::vec3(posX, posY, posZ); WorldUp = glm::vec3(upX, upY, upZ); Yaw = yaw; Pitch = pitch; UpdateCameraVectors(); } glm::mat4 GetViewMatrix() const; glm::mat4 LookAt(glm::vec3 position, glm::vec3 direction, glm::vec3 up); void ProcessKeyboard(CameraMovement direction, float deltaTime); void ProcessMouseMovement(float xoffset, float yoffset, GLboolean constrainPitch = true); void ProcessMouseScroll(float yoffset); private: void UpdateCameraVectors(); };