Skip to content
Snippets Groups Projects

OpenVR support

Merged Sebastian Hahta requested to merge feature/121/vr into master
1 file
+ 14
18
Compare changes
  • Side-by-side
  • Inline
@@ -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 {
Loading