summaryrefslogtreecommitdiffhomepage
path: root/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ftnoir_tracker_rift/ftnoir_tracker_rift.cpp')
-rw-r--r--ftnoir_tracker_rift/ftnoir_tracker_rift.cpp110
1 files changed, 46 insertions, 64 deletions
diff --git a/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp b/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp
index b548db71..68a520ad 100644
--- a/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp
+++ b/ftnoir_tracker_rift/ftnoir_tracker_rift.cpp
@@ -1,92 +1,74 @@
/* Copyright: "i couldn't care less what anyone does with the 5 lines of code i wrote" - mm0zct */
#include "ftnoir_tracker_rift.h"
-#include "facetracknoir/global-settings.h"
-#include "OVR.h"
+#include "facetracknoir/plugin-support.h"
+#include "OVR_CAPI.h"
+#include "Kernel/OVR_Math.h"
#include <cstdio>
using namespace OVR;
-Rift_Tracker::Rift_Tracker()
+Rift_Tracker::Rift_Tracker() : old_yaw(0), hmd(nullptr)
{
- should_quit = false;
- pManager = NULL;
- pSensor = NULL;
- pSFusion = NULL;
- old_yaw = 0;
}
Rift_Tracker::~Rift_Tracker()
{
- if (pSensor)
- pSensor->Release();
- if (pSFusion)
- delete pSFusion;
- if (pManager)
- pManager->Release();
- System::Destroy();
+ ovrHmd_Destroy(hmd);
+ ovr_Shutdown();
}
void Rift_Tracker::StartTracker(QFrame*)
{
- System::Init(Log::ConfigureDefaultLog(LogMask_All));
- pManager = DeviceManager::Create();
- if (pManager != NULL)
+ ovr_Initialize();
+ hmd = ovrHmd_Create(0);
+ if (hmd)
{
- DeviceEnumerator<OVR::SensorDevice> enumerator = pManager->EnumerateDevices<OVR::SensorDevice>();
- if (enumerator.IsAvailable())
- {
- pSensor = enumerator.CreateDevice();
-
- if (pSensor){
- pSFusion = new OVR::SensorFusion();
- pSFusion->Reset();
- pSFusion->AttachToSensor(pSensor);
- }else{
- QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to create Rift sensor",QMessageBox::Ok,QMessageBox::NoButton);
- }
-
- }else{
- QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to enumerate Rift tracker",QMessageBox::Ok,QMessageBox::NoButton);
- }
- }else{
- QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to start Rift tracker",QMessageBox::Ok,QMessageBox::NoButton);
- }
+ ovrHmd_ConfigureTracking(hmd, ovrTrackingCap_Orientation | ovrTrackingCap_MagYawCorrection | ovrTrackingCap_Position, ovrTrackingCap_Orientation);
+ }
+ else
+ {
+ // XXX need change ITracker et al api to allow for failure reporting
+ // this qmessagebox doesn't give any relevant details either -sh 20141012
+ QMessageBox::warning(0,"FaceTrackNoIR Error", "Unable to start Rift tracker",QMessageBox::Ok,QMessageBox::NoButton);
+ }
}
void Rift_Tracker::GetHeadPoseData(double *data)
{
- if (pSFusion != NULL && pSensor != NULL) {
- Quatf hmdOrient = pSFusion->GetOrientation();
- double newHeadPose[6];
-
- float yaw = 0.0f;
- float pitch = 0.0f;
- float roll = 0.0f;
- hmdOrient.GetEulerAngles<Axis_Y, Axis_X, Axis_Z>(&yaw, &pitch , &roll);
- newHeadPose[Pitch] = pitch;
- newHeadPose[Roll] = roll;
- newHeadPose[Yaw] = yaw;
- if (s.useYawSpring)
- {
- newHeadPose[Yaw] = old_yaw*s.persistence + (yaw-old_yaw);
- if(newHeadPose[Yaw]>s.deadzone)newHeadPose[Yaw]-= s.constant_drift;
- if(newHeadPose[Yaw]<-s.deadzone)newHeadPose[Yaw]+= s.constant_drift;
- old_yaw=yaw;
- }
- if (s.bEnableYaw) {
- data[Yaw] = newHeadPose[Yaw] * 57.295781f;
- }
- if (s.bEnablePitch) {
- data[Pitch] = newHeadPose[Pitch] * 57.295781f;
- }
- if (s.bEnableRoll) {
- data[Roll] = newHeadPose[Roll] * 57.295781f;
+ if (hmd)
+ {
+ ovrHSWDisplayState hsw;
+ if (ovrHmd_GetHSWDisplayState(hmd, &hsw), hsw.Displayed)
+ ovrHmd_DismissHSWDisplay(hmd);
+ ovrTrackingState ss = ovrHmd_GetTrackingState(hmd, 0);
+ if(ss.StatusFlags & ovrStatus_OrientationTracked) {
+ auto pose = ss.HeadPose.ThePose;
+ Quatf quat = pose.Orientation;
+ float yaw, pitch, roll;
+ quat.GetEulerAngles<Axis_Y, Axis_X, Axis_Z>(&yaw, &pitch, &roll);
+ // XXX TODO move to core
+ 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;
+ }
+ constexpr double d2r = 57.295781;
+ data[Yaw] = yaw * d2r;
+ data[Pitch] = pitch * -d2r;
+ data[Roll] = roll * d2r;
+ data[TX] = pose.Position.x * -1e2;
+ data[TY] = pose.Position.y * 1e2;
+ data[TZ] = pose.Position.z * 1e2;
}
}
}
-extern "C" FTNOIR_TRACKER_BASE_EXPORT ITracker* CALLING_CONVENTION GetConstructor()
+extern "C" OPENTRACK_EXPORT ITracker* GetConstructor()
{
return new Rift_Tracker;
}