diff --git a/applications/gui/src/camera.cpp b/applications/gui/src/camera.cpp index 97e65bf77530c009b75ec5d5fc469e234554704e..9141c862feac76b12d16bea5fc9380da8ca5fc99 100644 --- a/applications/gui/src/camera.cpp +++ b/applications/gui/src/camera.cpp @@ -612,6 +612,8 @@ const void ftl::gui::Camera::captureFrame() { //if (src_ && src_->isReady()) { if (width_ > 0 && height_ > 0) { + Eigen::Matrix4d viewPose; + if (screen_->isVR()) { #ifdef HAVE_OPENVR @@ -637,10 +639,10 @@ const void ftl::gui::Camera::captureFrame() { Eigen::Matrix4d pose = ConvertSteamVRMatrixToMatrix4(rTrackedDevicePose_[vr::k_unTrackedDeviceIndex_Hmd].mDeviceToAbsoluteTracking); Eigen::Vector3d ea = pose.block<3, 3>(0, 0).eulerAngles(0, 1, 2); - //LOG(INFO) << "Pose: " << pose; - eye_[0] = pose(0, 3); - eye_[1] = -pose(1, 3); - eye_[2] = -pose(2, 3); + Eigen::Vector3d vreye; + vreye[0] = pose(0, 3); + vreye[1] = -pose(1, 3); + vreye[2] = -pose(2, 3); // NOTE: If modified, should be verified with VR headset! Eigen::Matrix3d R; @@ -653,6 +655,16 @@ const void ftl::gui::Camera::captureFrame() { // pose.block<3, 3>(0, 0) = R; rotmat_.block(0, 0, 3, 3) = R; + + // TODO: Apply a rotation to orient also + + eye_[0] += (neye_[0] - eye_[0]) * lerpSpeed_ * delta_; + eye_[1] += (neye_[1] - eye_[1]) * lerpSpeed_ * delta_; + eye_[2] += (neye_[2] - eye_[2]) * lerpSpeed_ * delta_; + + Eigen::Translation3d trans(eye_ + vreye); + Eigen::Affine3d t(trans); + viewPose = t.matrix() * rotmat_; } else { //LOG(ERROR) << "No VR Pose"; @@ -665,7 +677,6 @@ const void ftl::gui::Camera::captureFrame() { float rry = (float)rx_ * 0.2f * delta_; float rrz = 0.0; - Eigen::Affine3d r = create_rotation_matrix(rrx, -rry, rrz); rotmat_ = rotmat_ * r.matrix(); @@ -675,11 +686,11 @@ const void ftl::gui::Camera::captureFrame() { eye_[0] += (neye_[0] - eye_[0]) * lerpSpeed_ * delta_; eye_[1] += (neye_[1] - eye_[1]) * lerpSpeed_ * delta_; eye_[2] += (neye_[2] - eye_[2]) * lerpSpeed_ * delta_; - } - Eigen::Translation3d trans(eye_); - Eigen::Affine3d t(trans); - Eigen::Matrix4d viewPose = t.matrix() * rotmat_; + Eigen::Translation3d trans(eye_); + Eigen::Affine3d t(trans); + viewPose = t.matrix() * rotmat_; + } { UNIQUE_LOCK(mutex_, lk);