summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--facetracknoir/options-dialog.cpp2
-rw-r--r--facetracknoir/settings.ui40
-rw-r--r--opentrack/main-settings.hpp4
-rw-r--r--opentrack/tracker.cpp39
4 files changed, 64 insertions, 21 deletions
diff --git a/facetracknoir/options-dialog.cpp b/facetracknoir/options-dialog.cpp
index 1ec26d5e..fef2b0ca 100644
--- a/facetracknoir/options-dialog.cpp
+++ b/facetracknoir/options-dialog.cpp
@@ -50,6 +50,8 @@ OptionsDialog::OptionsDialog()
tie_setting(s.s_main.camera_pitch, ui.camera_pitch);
tie_setting(s.s_main.camera_roll, ui.camera_roll);
+ tie_setting(s.s_main.center_method, ui.center_method);
+
connect(ui.bind_center, &QPushButton::pressed, [&]() -> void { bind_key(s.center.keycode, ui.center_text); });
connect(ui.bind_zero, &QPushButton::pressed, [&]() -> void { bind_key(s.zero.keycode, ui.zero_text); });
connect(ui.bind_toggle, &QPushButton::pressed, [&]() -> void { bind_key(s.toggle.keycode, ui.toggle_text); });
diff --git a/facetracknoir/settings.ui b/facetracknoir/settings.ui
index 5eea9e57..d87b68bf 100644
--- a/facetracknoir/settings.ui
+++ b/facetracknoir/settings.ui
@@ -141,6 +141,46 @@
</widget>
</item>
<item>
+ <widget class="QGroupBox" name="groupBox_9">
+ <property name="title">
+ <string>Centering method</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_26">
+ <property name="text">
+ <string>Method</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="center_method">
+ <item>
+ <property name="text">
+ <string>Relative</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Absolute</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="label_25">
+ <property name="text">
+ <string>Try changing this if centering doesn't perform correctly for your input device.</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
<widget class="QCheckBox" name="center_at_startup">
<property name="text">
<string>Center at startup</string>
diff --git a/opentrack/main-settings.hpp b/opentrack/main-settings.hpp
index b973e7af..d1fe574d 100644
--- a/opentrack/main-settings.hpp
+++ b/opentrack/main-settings.hpp
@@ -39,6 +39,7 @@ struct main_settings : opts {
value<bool> tray_enabled;
value<int> camera_yaw, camera_pitch, camera_roll;
value<bool> center_at_startup;
+ value<int> center_method;
main_settings() :
opts("opentrack-ui"),
tracker_dll(b, "tracker-dll", ""),
@@ -56,6 +57,7 @@ struct main_settings : opts {
camera_yaw(b, "camera-yaw", 0),
camera_pitch(b, "camera-pitch", 0),
camera_roll(b, "camera-roll", 0),
- center_at_startup(b, "center-at-startup", true)
+ center_at_startup(b, "center-at-startup", true),
+ center_method(b, "centering-method", false)
{}
};
diff --git a/opentrack/tracker.cpp b/opentrack/tracker.cpp
index 3d88a962..8fd054b4 100644
--- a/opentrack/tracker.cpp
+++ b/opentrack/tracker.cpp
@@ -78,26 +78,15 @@ void Tracker::logic()
Pose value, raw;
- if (!zero_)
- for (int i = 0; i < 6; i++)
- {
- auto& axis = m(i);
- int k = axis.opts.src;
- if (k < 0 || k >= 6)
- value(i) = 0;
- else
- value(i) = newpose[k];
- raw(i) = newpose[i];
- }
- else
+ for (int i = 0; i < 6; i++)
{
- auto mat = rmat::rmat_to_euler(r_b);
-
- for (int i = 0; i < 3; i++)
- {
- raw(i+3) = value(i+3) = mat(i) * r2d;
- raw(i) = value(i) = t_b[i];
- }
+ auto& axis = m(i);
+ int k = axis.opts.src;
+ if (k < 0 || k >= 6)
+ value(i) = 0;
+ else
+ value(i) = newpose[k];
+ raw(i) = newpose[i];
}
const double off[] = {
@@ -134,7 +123,17 @@ void Tracker::logic()
{
double tmp[3] = { t(0) - t_b[0], t(1) - t_b[1], t(2) - t_b[2] };
t_compensate(cam, tmp, tmp, false);
- const rmat m_ = r * r_b.t();
+ rmat m_;
+ switch (s.center_method)
+ {
+ case 0:
+ default:
+ m_ = r * r_b.t();
+ break;
+ case 1:
+ m_ = r_b.t() * r;
+ }
+
const dmat<3, 1> euler = rmat::rmat_to_euler(m_);
for (int i = 0; i < 3; i++)
{