1
0
Fork 0
Univerxel/src/client/control/Camera.hpp

44 lines
1.2 KiB
C++

#pragma once
#include "Controllable.hpp"
#include "../../core/geometry/Frustum.hpp"
#include "../../core/geometry/Ray.hpp"
/// Moving perspective camera
class Camera {
public:
struct options {
float fov = glm::radians(70.f);
float nearDist = 0.1f;
float farDist = 64.f;
};
Camera(const Controllable*, const options&);
~Camera();
void update();
void setOptions(const options &options) {
o = options;
updateProjection();
}
void setOrigin(const Controllable* ct) {
origin = ct;
}
inline geometry::Frustum getFrustum() const { return geometry::Frustum(ViewMatrix, ProjectionMatrix); }
inline geometry::Ray getRay() const { return geometry::Ray(origin->position, origin->getDirection(), o.farDist); }
constexpr glm::mat4 getViewMatrix() const { return ViewMatrix; }
constexpr glm::mat4 getProjectionMatrix() const { return ProjectionMatrix; }
constexpr float getDepth() const { return o.farDist; }
private:
const Controllable* origin;
glm::mat4 ViewMatrix;
glm::mat4 ProjectionMatrix;
void updateProjection();
options o;
};