1 #include "oculusriftcamera.h"
2 #include "oculusriftdevice.h"
3 #include "oculusriftdevice_private.h"
8 OculusRiftCamera::OculusRiftCamera(const OculusRiftDevice &d, const GL::Camera &c):
12 const OculusRiftDevice::Private &dev_priv = device.get_private();
13 unsigned supported = ovrTrackingCap_Orientation|ovrTrackingCap_MagYawCorrection;
14 ovrHmd_ConfigureTracking(dev_priv.ovr_hmd, supported, 0);
17 OculusRiftCamera::~OculusRiftCamera()
21 void OculusRiftCamera::update()
23 ovrTrackingState state = ovrHmd_GetTrackingState(device.get_private().ovr_hmd, ovr_GetTimeInSeconds());
24 OVR::Posef head_pose = state.HeadPose.ThePose;
25 OVR::Matrix4f tracking_matrix(head_pose.Rotation);
26 const float *m = &tracking_matrix.M[0][0];
28 const GL::Vector3 &base_look = base_camera.get_look_direction();
29 GL::Vector3 base_right = normalize(cross(base_look, base_camera.get_up_direction()));
30 GL::Vector3 base_up = normalize(cross(base_right, base_look));
32 set_position(base_camera.get_position());
33 set_up_direction(base_right*m[1]+base_up*m[5]-base_look*m[9]);
34 set_look_direction(-base_right*m[2]-base_up*m[6]+base_look*m[10]);
35 set_depth_clip(base_camera.get_near_clip(), base_camera.get_far_clip());
36 set_field_of_view(base_camera.get_field_of_view());
37 set_aspect(base_camera.get_aspect());