X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcamera.cpp;h=4bbb0f12f0fadb6955bf230d99a88fa116d65355;hb=5588a6a9b1e2fb6fee8f1166f855ef497e551a09;hp=8a3a8a1bfe3b7559b8d4c1cd42ee8c4adaa85933;hpb=81531352f0af10ef357e82595098fa596795f000;p=blank.git diff --git a/src/camera.cpp b/src/camera.cpp index 8a3a8a1..4bbb0f1 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -13,11 +13,7 @@ Camera::Camera() , near_clip(0.1f) , far_clip(100.0f) , projection(glm::perspective(fov, aspect, near_clip, far_clip)) -, vp(projection) { - -} - -Camera::~Camera() { +, view(glm::inverse(Transform())) { } @@ -51,10 +47,19 @@ void Camera::Clip(float near, float far) { UpdateProjection(); } +Ray Camera::Aim() const { + const glm::mat4 inv_vp(glm::inverse(projection * view)); + glm::vec4 from = inv_vp * glm::vec4(0.0f, 0.0f, -1.0f, 1.0f); + from /= from.w; + glm::vec4 to = inv_vp * glm::vec4(0.0f, 0.0f, 1.0f, 1.0f); + to /= to.w; + return Ray{ glm::vec3(from), glm::normalize(glm::vec3(to - from)) }; +} + void Camera::Update(int dt) { FPSController::Update(dt); - vp = projection * glm::inverse(Transform()); + view = glm::inverse(Transform()); } void Camera::UpdateProjection() {