1 #include "headtrackingcamera.h"
6 HeadTrackingCamera::HeadTrackingCamera(const GL::Camera &c):
11 void HeadTrackingCamera::set_elevation_offset(float o)
16 void HeadTrackingCamera::update_from_matrix(const GL::Matrix &hmd_matrix)
18 const GL::Vector3 &up = base_camera.get_up_direction();
19 GL::Vector3 right = normalize(cross(base_camera.get_look_direction(), up));
20 GL::Vector4 columns[4];
21 columns[0] = compose(right, 0.0f);
22 columns[1] = compose(up, 0.0f);
23 columns[2] = compose(cross(right, up), 0.0f);
24 columns[3] = compose(base_camera.get_position(), 1.0f);
25 GL::Matrix matrix = GL::Matrix::from_columns(columns)*hmd_matrix;
27 set_position(matrix*GL::Vector3()+base_camera.get_up_direction()*elevation_offset);
28 set_look_direction((matrix*GL::Vector4(0, 0, -1, 0)).slice<3>(0));
29 set_up_direction((matrix*GL::Vector4(0, 1, 0, 0)).slice<3>(0));
31 set_depth_clip(base_camera.get_near_clip(), base_camera.get_far_clip());
32 set_field_of_view(base_camera.get_field_of_view());
33 set_aspect(base_camera.get_aspect());