]> git.tdb.fi Git - libs/vr.git/blobdiff - source/headtrackingcamera.cpp
Store the base matrix of HeadTrackingCamera and provice access to it
[libs/vr.git] / source / headtrackingcamera.cpp
index 42eedd5d90caa21543776a47d95049069b99e587..9f4dd5c16768471c33e1a926f205021df50a3224 100644 (file)
@@ -15,9 +15,18 @@ void HeadTrackingCamera::set_elevation_offset(float o)
 
 void HeadTrackingCamera::update_from_matrix(const GL::Matrix &hmd_matrix)
 {
-       GL::Matrix matrix = base_camera.get_object_matrix()*hmd_matrix;
+       const GL::Vector3 &up = base_camera.get_up_direction();
+       GL::Vector3 right = normalize(cross(base_camera.get_look_direction(), up));
+       GL::Vector4 columns[4];
+       columns[0] = compose(right, 0.0f);
+       columns[1] = compose(up, 0.0f);
+       columns[2] = compose(cross(right, up), 0.0f);
+       columns[3] = compose(base_camera.get_position()+base_camera.get_up_direction()*elevation_offset, 1.0f);
+       base_matrix = GL::Matrix::from_columns(columns);
 
-       set_position(matrix*GL::Vector3()+base_camera.get_up_direction()*elevation_offset);
+       GL::Matrix matrix = base_matrix*hmd_matrix;
+
+       set_position(matrix*GL::Vector3());
        set_look_direction((matrix*GL::Vector4(0, 0, -1, 0)).slice<3>(0));
        set_up_direction((matrix*GL::Vector4(0, 1, 0, 0)).slice<3>(0));