Move some common calculations to base classes
[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 { }
9
10 void HeadTrackingCamera::update_from_matrix(const GL::Matrix &hmd_matrix)
11 {
12         GL::Matrix matrix = base_camera.get_object_matrix()*hmd_matrix;
13
14         set_position(matrix*GL::Vector3());
15         set_look_direction((matrix*GL::Vector4(0, 0, -1, 0)).slice<3>(0));
16         set_up_direction((matrix*GL::Vector4(0, 1, 0, 0)).slice<3>(0));
17
18         set_depth_clip(base_camera.get_near_clip(), base_camera.get_far_clip());
19         set_field_of_view(base_camera.get_field_of_view());
20         set_aspect(base_camera.get_aspect());
21 }
22
23 } // namespace VR
24 } // namespace Msp