X-Git-Url: http://git.tdb.fi/?p=libs%2Fvr.git;a=blobdiff_plain;f=source%2Fovr%2Foculusriftcamera.cpp;h=713ae3cec5a480f5bc943fb1572856e4507c6fda;hp=0eede270de864b92f17bf18031c0d012cf2b1a65;hb=dca13ee66628568631f502dfc79847c7368c7bb1;hpb=735148a3ecf7e753f520f22668b771583185f72f diff --git a/source/ovr/oculusriftcamera.cpp b/source/ovr/oculusriftcamera.cpp index 0eede27..713ae3c 100644 --- a/source/ovr/oculusriftcamera.cpp +++ b/source/ovr/oculusriftcamera.cpp @@ -6,8 +6,8 @@ namespace Msp { namespace VR { OculusRiftCamera::OculusRiftCamera(const OculusRiftDevice &d, const GL::Camera &c): - device(d), - base_camera(c) + HeadTrackingCamera(c), + device(d) { unsigned supported = ovrTrackingCap_Orientation|ovrTrackingCap_MagYawCorrection|ovrTrackingCap_Position; ovrHmd_ConfigureTracking(device.get_private().ovr_hmd, supported, 0); @@ -28,20 +28,8 @@ void OculusRiftCamera::update() ovrTrackingState state = ovrHmd_GetTrackingState(device.get_private().ovr_hmd, time); OVR::Posef head_pose = state.HeadPose.ThePose; - OVR::Matrix4f tracking_matrix(head_pose.Rotation); - OVR::Vector3f trans = head_pose.Translation; - const float *m = &tracking_matrix.M[0][0]; - - const GL::Vector3 &base_look = base_camera.get_look_direction(); - GL::Vector3 base_right = normalize(cross(base_look, base_camera.get_up_direction())); - GL::Vector3 base_up = normalize(cross(base_right, base_look)); - - set_position(base_camera.get_position()+trans.x*base_right+trans.y*base_up-trans.z*base_look); - set_up_direction(base_right*m[1]+base_up*m[5]-base_look*m[9]); - set_look_direction(-base_right*m[2]-base_up*m[6]+base_look*m[10]); - set_depth_clip(base_camera.get_near_clip(), base_camera.get_far_clip()); - set_field_of_view(base_camera.get_field_of_view()); - set_aspect(base_camera.get_aspect()); + OVR::Matrix4f tracking_matrix(head_pose); + update_from_matrix(transpose(GL::Matrix(&tracking_matrix.M[0][0]))); } } // namespace VR