From 100d10dc9eed3e811963fd3ad92b03d7e5d540dc Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Thu, 30 May 2013 11:08:33 -0700 Subject: [PATCH] Offset camera fix, cleaner frustum transformation. --- interface/src/Application.cpp | 9 +++++---- libraries/voxels/src/ViewFrustum.cpp | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9f06562aa5..3def951b14 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -338,6 +338,7 @@ void Application::paintGL() { _viewFrustumOffsetPitch, _viewFrustumOffsetYaw, _viewFrustumOffsetRoll)))); _viewFrustumOffsetCamera.setUpShift (_viewFrustumOffsetUp ); _viewFrustumOffsetCamera.setDistance (_viewFrustumOffsetDistance); + _viewFrustumOffsetCamera.initialize(); // force immediate snap to ideal position and orientation _viewFrustumOffsetCamera.update(1.f/_fps); whichCamera = _viewFrustumOffsetCamera; } @@ -1381,9 +1382,9 @@ void Application::loadViewFrustum(Camera& camera, ViewFrustum& viewFrustum) { float farClip = camera.getFarClip(); glm::quat rotation = camera.getRotation(); - glm::vec3 direction = rotation * IDENTITY_FRONT; - glm::vec3 up = rotation * IDENTITY_UP; - glm::vec3 right = rotation * IDENTITY_RIGHT; + glm::vec3 direction = rotation * AVATAR_FRONT; + glm::vec3 up = rotation * AVATAR_UP; + glm::vec3 right = rotation * AVATAR_RIGHT; /* printf("position.x=%f, position.y=%f, position.z=%f\n", position.x, position.y, position.z); @@ -1398,7 +1399,7 @@ void Application::loadViewFrustum(Camera& camera, ViewFrustum& viewFrustum) { // Set the viewFrustum up with the correct position and orientation of the camera viewFrustum.setPosition(position); - viewFrustum.setOrientation(direction,up,-right); + viewFrustum.setOrientation(direction,up,right); // Also make sure it's got the correct lens details from the camera viewFrustum.setFieldOfView(fov); diff --git a/libraries/voxels/src/ViewFrustum.cpp b/libraries/voxels/src/ViewFrustum.cpp index 2414103467..061727b003 100644 --- a/libraries/voxels/src/ViewFrustum.cpp +++ b/libraries/voxels/src/ViewFrustum.cpp @@ -59,7 +59,7 @@ void ViewFrustum::calculate() { // find the intersections of the rays through the corners with the clip planes in view space, // then transform them to world space - glm::mat4 worldMatrix = glm::translate(_position) * glm::mat4(glm::mat3(_right, _up, _direction)) * + glm::mat4 worldMatrix = glm::translate(_position) * glm::mat4(glm::mat3(_right, _up, -_direction)) * glm::translate(_eyeOffsetPosition) * glm::mat4_cast(_eyeOffsetOrientation); _farTopLeft = glm::vec3(worldMatrix * glm::vec4(topLeft * (-farClipPlane.w / glm::dot(topLeft, glm::vec3(farClipPlane))), 1.0f));