X-Git-Url: http://git.tdb.fi/?p=libs%2Fvr.git;a=blobdiff_plain;f=source%2Foculusriftcamera.cpp;fp=source%2Foculusriftcamera.cpp;h=9b85d12e8f474e32d5bb4372d271e0263e785fa0;hp=0000000000000000000000000000000000000000;hb=b7f83509d995b5037e27eb7c94811d43c4d51e1b;hpb=8e2e8257d569fd9a626bdb2a4a0e8767f3b3be12 diff --git a/source/oculusriftcamera.cpp b/source/oculusriftcamera.cpp new file mode 100644 index 0000000..9b85d12 --- /dev/null +++ b/source/oculusriftcamera.cpp @@ -0,0 +1,40 @@ +#include "oculusriftcamera.h" +#include "oculusriftcamera_private.h" +#include "oculusriftdevice.h" +#include "oculusriftdevice_private.h" + +namespace Msp { +namespace VR { + +OculusRiftCamera::OculusRiftCamera(const OculusRiftDevice &d, const GL::Camera &c): + device(d), + base_camera(c), + priv(new Private) +{ + const OculusRiftDevice::Private &dev_priv = device.get_private(); + priv->ovr_sensor = dev_priv.ovr_hmd->GetSensor(); + priv->fusion.AttachToSensor(priv->ovr_sensor); +} + +OculusRiftCamera::~OculusRiftCamera() +{ + delete priv; +} + +void OculusRiftCamera::update() +{ + OVR::Matrix4f sensor_matrix = priv->fusion.GetOrientation(); + const float *m = &sensor_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()); + 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()); +} + +} // namespace VR +} // namespace Msp