From 81310e18abba8d17289cde6670e62d96f24e9d01 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 22 Jul 2016 10:15:17 +0200 Subject: gui/options, logic: add experimental offset from center This works fine for rotating the translation. --- gui/options-dialog.cpp | 1 + gui/settings.ui | 195 +++++++++++++++++++++++++++++--------- opentrack-logic/main-settings.hpp | 2 + opentrack-logic/tracker.cpp | 7 ++ 4 files changed, 158 insertions(+), 47 deletions(-) diff --git a/gui/options-dialog.cpp b/gui/options-dialog.cpp index fb0b3454..3b54ae9a 100644 --- a/gui/options-dialog.cpp +++ b/gui/options-dialog.cpp @@ -68,6 +68,7 @@ OptionsDialog::OptionsDialog(std::function pause_keybindings) : tie_setting(main.camera_yaw, ui.camera_yaw); tie_setting(main.camera_pitch, ui.camera_pitch); tie_setting(main.camera_roll, ui.camera_roll); + tie_setting(main.use_camera_offset_from_centering, ui.use_center_as_translation_camera_offset); tie_setting(main.center_method, ui.center_method); diff --git a/gui/settings.ui b/gui/settings.ui index 4c166a08..45541d45 100644 --- a/gui/settings.ui +++ b/gui/settings.ui @@ -6,8 +6,8 @@ 0 0 - 384 - 639 + 480 + 625 @@ -24,12 +24,24 @@ false - + + + + 0 + 0 + + 0 + + + 0 + 0 + + Shortcuts @@ -278,46 +290,6 @@ - - - - Centering method - - - - - - Method - - - - - - - - Relative (inertial device) - - - - - Absolute (camera device) - - - - - - - - Try changing this if centering doesn't perform correctly for your input device. - - - true - - - - - - @@ -332,13 +304,29 @@ + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 0 + + + + Camera - + @@ -364,6 +352,26 @@ + + + + Use camera center as translation offset + + + + + + + This option is experimental. Please report your findings on the github issue tracker. + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + @@ -373,6 +381,12 @@ } + + 2 + + + 2 + @@ -445,6 +459,19 @@ + + + + + 0 + 0 + + + + 1 + + + @@ -631,15 +658,70 @@ + + + + Centering method + + + + + + + 2 + 0 + + + + Method + + + + + + + + 3 + 0 + + + + + Relative (inertial device) + + + + + Absolute (camera device) + + + + + + + + Try changing this if centering doesn't perform correctly for your input device. + + + true + + + + + + Qt::Vertical + + QSizePolicy::Minimum + 20 - 40 + 0 @@ -1133,10 +1215,13 @@ Qt::Vertical + + QSizePolicy::Minimum + 20 - 40 + 0 @@ -1154,7 +1239,7 @@ Game detection - + @@ -1176,6 +1261,22 @@ + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 0 + + + + diff --git a/opentrack-logic/main-settings.hpp b/opentrack-logic/main-settings.hpp index 1aa0d38c..a7dcd11c 100644 --- a/opentrack-logic/main-settings.hpp +++ b/opentrack-logic/main-settings.hpp @@ -67,6 +67,7 @@ struct main_settings value tcomp_p, tcomp_tz; value tray_enabled; value camera_yaw, camera_pitch, camera_roll; + value use_camera_offset_from_centering; value center_at_startup; value center_method; key_opts key_start_tracking, key_stop_tracking, key_toggle_tracking, key_restart_tracking; @@ -86,6 +87,7 @@ struct main_settings camera_yaw(b, "camera-yaw", 0), camera_pitch(b, "camera-pitch", 0), camera_roll(b, "camera-roll", 0), + use_camera_offset_from_centering(b, "use-camera-offset-from-centering", false), center_at_startup(b, "center-at-startup", true), center_method(b, "centering-method", true), key_start_tracking(b, "start-tracking"), diff --git a/opentrack-logic/tracker.cpp b/opentrack-logic/tracker.cpp index 3602ad4e..3596eb19 100644 --- a/opentrack-logic/tracker.cpp +++ b/opentrack-logic/tracker.cpp @@ -195,6 +195,13 @@ void Tracker::logic() const euler_t euler = r2d * rmat_to_euler(m_); + euler_t tmp(t(0) - t_b[0], t(1) - t_b[1], t(2) - t_b[2]); + + if (s.use_camera_offset_from_centering) + t_compensate(r_b.t() * cam.t(), tmp, tmp, false); + else + t_compensate(cam.t(), tmp, tmp, false); + for (int i = 0; i < 3; i++) { value(i) = tmp(i); -- cgit v1.2.3