diff options
Diffstat (limited to 'gfx/camera.cpp')
-rw-r--r-- | gfx/camera.cpp | 15 |
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 { |