42eedd5d90caa21543776a47d95049069b99e587
[libs/vr.git] / source / headtrackingcamera.cpp
1 #include "headtrackingcamera.h"
2
3 namespace Msp {
4 namespace VR {
5
6 HeadTrackingCamera::HeadTrackingCamera(const GL::Camera &c):
7         base_camera(c),
8         elevation_offset(0)
9 { }
10
11 void HeadTrackingCamera::set_elevation_offset(float o)
12 {
13         elevation_offset = o;
14 }
15
16 void HeadTrackingCamera::update_from_matrix(const GL::Matrix &hmd_matrix)
17 {
18         GL::Matrix matrix = base_camera.get_object_matrix()*hmd_matrix;
19
20         set_position(matrix*GL::Vector3()+base_camera.get_up_direction()*elevation_offset);
21         set_look_direction((matrix*GL::Vector4(0, 0, -1, 0)).slice<3>(0));
22         set_up_direction((matrix*GL::Vector4(0, 1, 0, 0)).slice<3>(0));
23
24         set_depth_clip(base_camera.get_near_clip(), base_camera.get_far_clip());
25         set_field_of_view(base_camera.get_field_of_view());
26         set_aspect(base_camera.get_aspect());
27 }
28
29 } // namespace VR
30 } // namespace Msp