]> git.tdb.fi Git - libs/vr.git/blobdiff - source/ovr/oculusriftcamera.cpp
Rename DisplayDevice to System
[libs/vr.git] / source / ovr / oculusriftcamera.cpp
index 0eede270de864b92f17bf18031c0d012cf2b1a65..4da732b29251056255529e9df321ba28940b3090 100644 (file)
@@ -1,13 +1,13 @@
 #include "oculusriftcamera.h"
-#include "oculusriftdevice.h"
-#include "oculusriftdevice_private.h"
+#include "oculusriftsystem.h"
+#include "oculusriftsystem_private.h"
 
 namespace Msp {
 namespace VR {
 
-OculusRiftCamera::OculusRiftCamera(const OculusRiftDevice &d, const GL::Camera &c):
-       device(d),
-       base_camera(c)
+OculusRiftCamera::OculusRiftCamera(const OculusRiftSystem &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);
@@ -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