]> git.tdb.fi Git - libs/vr.git/blob - source/libovr/libovrcamera.cpp
Add functions to use absolute tracking
[libs/vr.git] / source / libovr / libovrcamera.cpp
1 #include "libovrcamera.h"
2 #include "libovrsystem.h"
3 #include "libovrsystem_private.h"
4
5 namespace Msp {
6 namespace VR {
7
8 LibOVRCamera::LibOVRCamera(const LibOVRSystem &d, const GL::Camera &c):
9         HeadTrackingCamera(c),
10         device(d)
11 {
12         unsigned supported = ovrTrackingCap_Orientation|ovrTrackingCap_MagYawCorrection|ovrTrackingCap_Position;
13         ovrHmd_ConfigureTracking(device.get_private().ovr_hmd, supported, 0);
14 }
15
16 void LibOVRCamera::reset_tracking()
17 {
18         ovrHmd_RecenterPose(device.get_private().ovr_hmd);
19 }
20
21 void LibOVRCamera::update()
22 {
23         double time;
24         if(device.is_timing_active())
25                 time = device.get_tracking_time();
26         else
27                 time = device.get_current_time();
28
29         ovrTrackingState state = ovrHmd_GetTrackingState(device.get_private().ovr_hmd, time);
30         OVR::Posef head_pose = state.HeadPose.ThePose;
31         OVR::Matrix4f tracking_matrix(head_pose);
32         update_from_matrix(transpose(GL::Matrix(&tracking_matrix.M[0][0])));
33 }
34
35 } // namespace VR
36 } // namespace Msp