diff --git a/applications/gui/src/camera.cpp b/applications/gui/src/camera.cpp index 011dd74bb40c6e85674ad681e11f305592229663..123b23e7ef751b3728003be818b80ef8a5b38dbd 100644 --- a/applications/gui/src/camera.cpp +++ b/applications/gui/src/camera.cpp @@ -353,37 +353,33 @@ const GLTexture &ftl::gui::Camera::captureFrame() { Eigen::Matrix4d eye_l = ConvertSteamVRMatrixToMatrix4( vr::VRSystem()->GetEyeToHeadTransform(vr::Eye_Left)); - //Eigen::Matrix4d eye_r = ConvertSteamVRMatrixToMatrix4( - // vr::VRSystem()->GetEyeToHeadTransform(vr::Eye_Right)); - //LOG(INFO) << ConvertSteamVRMatrixToMatrix4(vr::VRSystem()->GetProjectionMatrix(vr::Eye_Left, 0.01, 10.0)); - //LOG(INFO) << "\n" << ConvertSteamVRMatrixToMatrix4(vr::VRSystem()->GetProjectionMatrix(vr::Eye_Left, 0.1, 100.0)); // assumes eye_l(3, 0) = -eye_r(3, 0) // => baseline = abs(2*eye_l(3, 0)) - float baseline_in = 2.0 * -eye_l(0, 3); if (baseline_in != baseline_) { baseline_ = baseline_in; - LOG(INFO) << source()->getNet()->getID(); - /* - screen_-> control()->set( - source()->getNet()->getPeerId("tcp://localhost:9001"), - source()->getURI() + "/baseline", baseline_); - - LOG(INFO) << "Baseline updated, new value: " << baseline_;*/ + // TODO: update baseline on ftl-reconstruct } - auto pose = ConvertSteamVRMatrixToMatrix4( rTrackedDevicePose_[vr::k_unTrackedDeviceIndex_Hmd].mDeviceToAbsoluteTracking ); - - pose = pose.inverse(); + Eigen::Matrix4d pose = ConvertSteamVRMatrixToMatrix4(rTrackedDevicePose_[vr::k_unTrackedDeviceIndex_Hmd].mDeviceToAbsoluteTracking); + // translate to L eye Eigen::Translation3d trans(eye_); Eigen::Affine3d t(trans); - Eigen::Matrix4d viewPose = t.matrix() * pose; - + Eigen::Matrix4d viewPose = t.matrix() * pose; + + // flip rotation (different coordinate axis on OpenGL/ftl) + Eigen::Vector3d ea = viewPose.block<3, 3>(0, 0).eulerAngles(0, 1, 2); + Eigen::Matrix3d R; + R = Eigen::AngleAxisd(-ea[0], Eigen::Vector3d::UnitX()) * + Eigen::AngleAxisd(ea[1], Eigen::Vector3d::UnitY()) * + Eigen::AngleAxisd(-ea[2], Eigen::Vector3d::UnitZ()); + viewPose.block<3, 3>(0, 0) = R; + if (src_->hasCapabilities(ftl::rgbd::kCapMovable)) src_->setPose(viewPose); } else { - //DLOG(ERROR) << "No VR Pose"; + LOG(ERROR) << "No VR Pose"; } #endif } else {