diff options
Diffstat (limited to 'tracker-rift-140/rift-140.cpp')
| -rw-r--r-- | tracker-rift-140/rift-140.cpp | 60 |
1 files changed, 26 insertions, 34 deletions
diff --git a/tracker-rift-140/rift-140.cpp b/tracker-rift-140/rift-140.cpp index 45bfcc97..164b47f7 100644 --- a/tracker-rift-140/rift-140.cpp +++ b/tracker-rift-140/rift-140.cpp @@ -15,16 +15,13 @@ #include "rift-140.hpp" #include "api/plugin-api.hpp" -#include "compat/util.hpp" #include <Extras/OVR_Math.h> #include <QString> using namespace OVR; -rift_tracker_140::rift_tracker_140() : old_yaw(0), hmd(nullptr) -{ -} +rift_tracker_140::rift_tracker_140() = default; rift_tracker_140::~rift_tracker_140() { @@ -35,32 +32,31 @@ rift_tracker_140::~rift_tracker_140() } } -void rift_tracker_140::start_tracker(QFrame*) +module_status rift_tracker_140::start_tracker(QFrame*) { if (OVR_FAILURE(ovr_Initialize(nullptr))) goto error; - if(OVR_FAILURE(ovr_Create(&hmd, &luid))) + if (OVR_FAILURE(ovr_Create(&hmd, &luid))) + goto error; + + if (OVR_FAILURE(ovr_SetTrackingOriginType(hmd, ovrTrackingOrigin_EyeLevel))) goto error; - return; + return status_ok(); error: hmd = nullptr; ovrErrorInfo err; ovr_GetLastErrorInfo(&err); - QString strerror(err.ErrorString); - if (strerror.size() == 0) - strerror = QStringLiteral("Unknown reason #%1").arg(err.Result); + QString error_string(err.ErrorString); + if (error_string.size() == 0) + error_string = QStringLiteral("Unknown reason #%1").arg(err.Result); ovr_Shutdown(); - QMessageBox::warning(nullptr, - "Error", - QCoreApplication::translate("rift_tracker_140", "Unable to start Rift tracker: %1").arg(strerror), - QMessageBox::Ok, - QMessageBox::NoButton); + return error(error_string); } void rift_tracker_140::data(double *data) @@ -70,8 +66,8 @@ void rift_tracker_140::data(double *data) ovrTrackingState ss = ovr_GetTrackingState(hmd, 0, false); if (ss.StatusFlags & ovrStatus_OrientationTracked) { - static constexpr float c_mult = 8; - static constexpr float c_div = 1/c_mult; + constexpr float c_mult = 8; + constexpr float c_div = 1/c_mult; Vector3f axis; float angle; @@ -87,25 +83,21 @@ void rift_tracker_140::data(double *data) pitch *= c_mult; roll *= c_mult; - double yaw_ = double(yaw); - if (s.useYawSpring) - { - yaw_ = old_yaw*s.persistence + (yaw_-old_yaw); - if(yaw_ > s.deadzone) - yaw_ -= s.constant_drift; - if(yaw_ < -s.deadzone) - yaw_ += s.constant_drift; - old_yaw = yaw_; - } - static constexpr double d2r = 180 / M_PI; - data[Yaw] = yaw_ * -d2r; - data[Pitch] = double(pitch) * d2r; - data[Roll] = double(roll) * d2r; - data[TX] = double(pose.Translation.x) * -1e2; - data[TY] = double(pose.Translation.y) * 1e2; - data[TZ] = double(pose.Translation.z) * 1e2; + constexpr double d2r = 180 / M_PI; + data[Yaw] = double(yaw) * -d2r; + data[Pitch] = double(pitch) * d2r; + data[Roll] = double(roll) * d2r; + data[TX] = double(pose.Translation.x) * -1e2; + data[TY] = double(pose.Translation.y) * 1e2; + data[TZ] = double(pose.Translation.z) * 1e2; } } } +bool rift_tracker_140::center() +{ + (void)ovr_RecenterTrackingOrigin(hmd); + return false; +} + OPENTRACK_DECLARE_TRACKER(rift_tracker_140, dialog_rift_140, rift_140Dll) |
