summaryrefslogtreecommitdiff
path: root/gfx/camera.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/camera.cpp')
-rw-r--r--gfx/camera.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/gfx/camera.cpp b/gfx/camera.cpp
index f01054a..3bb785d 100644
--- a/gfx/camera.cpp
+++ b/gfx/camera.cpp
@@ -5,17 +5,24 @@
#include <ray.h>
Camera::Camera(GlobalPosition3D pos, Angle fov, Angle aspect, GlobalDistance near, GlobalDistance far) :
- Camera {pos, near, far, glm::lookAt({}, ::north, ::up),
+ Camera {pos, fov, aspect, near, far, glm::lookAt({}, ::north, ::up),
glm::perspective(fov, aspect, static_cast<RelativeDistance>(near), static_cast<RelativeDistance>(far))}
{
}
-Camera::Camera(GlobalPosition3D pos, GlobalDistance near, GlobalDistance far, const glm::mat4 & view,
- const glm::mat4 & projection) :
- Frustum {pos, view, projection}, forward {::north}, up {::up}, near {near}, far {far}
+Camera::Camera(GlobalPosition3D pos, Angle fov, Angle aspect, GlobalDistance near, GlobalDistance far,
+ const glm::mat4 & view, const glm::mat4 & projection) :
+ Frustum {pos, view, projection}, fov {fov}, aspect {aspect}, forward {::north}, up {::up}, near {near}, far {far}
{
}
+void
+Camera::setAspect(Angle aspect)
+{
+ projection = glm::perspective(fov, aspect, static_cast<RelativeDistance>(near), static_cast<RelativeDistance>(far));
+ Frustum::updateCache();
+}
+
Ray<GlobalPosition3D>
Camera::unProject(const ScreenRelCoord & mouse) const
{