X-Git-Url: http://git.tdb.fi/?p=libs%2Fvr.git;a=blobdiff_plain;f=source%2Flibovr%2Flibovrcamera.cpp;fp=source%2Flibovr%2Flibovrcamera.cpp;h=744608619a5926dabb77de836ae31a9966d30564;hp=0000000000000000000000000000000000000000;hb=31c28161d36749d040cbab0099b352f53cad232d;hpb=b6de7d24475dec8f5d6b8148a69cf8b561bc0761 diff --git a/source/libovr/libovrcamera.cpp b/source/libovr/libovrcamera.cpp new file mode 100644 index 0000000..7446086 --- /dev/null +++ b/source/libovr/libovrcamera.cpp @@ -0,0 +1,36 @@ +#include "libovrcamera.h" +#include "libovrsystem.h" +#include "libovrsystem_private.h" + +namespace Msp { +namespace VR { + +LibOVRCamera::LibOVRCamera(const LibOVRSystem &d, const GL::Camera &c): + HeadTrackingCamera(c), + device(d) +{ + unsigned supported = ovrTrackingCap_Orientation|ovrTrackingCap_MagYawCorrection|ovrTrackingCap_Position; + ovrHmd_ConfigureTracking(device.get_private().ovr_hmd, supported, 0); +} + +void LibOVRCamera::reset_tracking() +{ + ovrHmd_RecenterPose(device.get_private().ovr_hmd); +} + +void LibOVRCamera::update() +{ + double time; + if(device.is_timing_active()) + time = device.get_tracking_time(); + else + time = device.get_current_time(); + + ovrTrackingState state = ovrHmd_GetTrackingState(device.get_private().ovr_hmd, time); + OVR::Posef head_pose = state.HeadPose.ThePose; + OVR::Matrix4f tracking_matrix(head_pose); + update_from_matrix(transpose(GL::Matrix(&tracking_matrix.M[0][0]))); +} + +} // namespace VR +} // namespace Msp