Files
LearningOpenGL/Camera.cpp
2025-08-15 20:35:29 -04:00

88 lines
1.7 KiB
C++

#include "Camera.h"
glm::vec3 CameraOffset;
float MovementSpeed;
float MouseSensitivity;
float Zoom;
Camera::Camera(GLFWwindow* Window)
: GameObject(glm::vec3(0.0f), glm::vec3(0.0f), glm::vec3(0.0f)),
Window(Window)
{
}
glm::mat4 Camera::GetViewMatrix()
{
return glm::lookAt(Position, Position + Front, Up);
}
void Camera::SetOffset(glm::vec3 Offset)
{
this->Offset = Offset;
}
void Camera::MoveCamera(glm::vec3 Position)
{
this->Position = Position + Offset;
UpdateVectors();
}
void Camera::RotateCamera(float Yaw, float Pitch, GLboolean bConstrainPitch)
{
Rotation.y += Yaw;
Rotation.x += Pitch;
if (bConstrainPitch)
{
if (Rotation.x > 89.0f)
Rotation.x = 89.0f;
if (Rotation.x < -89.0f)
Rotation.x = -89.0f;
}
UpdateVectors();
}
void Camera::ZoomCamera(float ZoomAmount)
{
Zoom -= (float)ZoomAmount;
if (Zoom < 1.0f)
Zoom = 1.0f;
if (Zoom > 45.0f)
Zoom = 45.0f;
}
void Camera::RenderScene(
LevelMap& LevelMap,
const std::vector<PointLight>& Lights,
int ScreenWidth,
int ScreenHeight)
{
// Set viewport
glViewport(0, 0, ScreenWidth, ScreenHeight);
// Clear buffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Calculate matrices
glm::mat4 Projection = GetProjectionMatrix(ScreenWidth, ScreenHeight);
glm::mat4 View = GetViewMatrix();
glm::mat4 Model = glm::mat4(1.0f);
// Verify matrices are valid
if (isnan(Projection[0].x) || isnan(View[0].x)) {
std::cerr << "Invalid camera matrices!" << std::endl;
return;
}
}
glm::mat4 Camera::GetProjectionMatrix(int ScreenWidth, int ScreenHeight) {
return glm::perspective(
glm::radians(Zoom),
(float)ScreenWidth / (float)ScreenHeight,
0.1f,
100.0f
);
}