X-Git-Url: http://git.tdb.fi/?p=libs%2Fvr.git;a=blobdiff_plain;f=source%2Fheadtrackingcamera.cpp;h=9f4dd5c16768471c33e1a926f205021df50a3224;hp=a296639315634c0f2f4feb689dd988e81746bd49;hb=8b0577558582dd34362219e498f688d9416f0ca1;hpb=b70741a6810b7fe822212dd6fa9110f674a47036 diff --git a/source/headtrackingcamera.cpp b/source/headtrackingcamera.cpp index a296639..9f4dd5c 100644 --- a/source/headtrackingcamera.cpp +++ b/source/headtrackingcamera.cpp @@ -15,16 +15,18 @@ void HeadTrackingCamera::set_elevation_offset(float o) void HeadTrackingCamera::update_from_matrix(const GL::Matrix &hmd_matrix) { - const GL::Vector3 &up_dir = base_camera.get_up_direction(); - GL::Vector3 right_dir = normalize(cross(base_camera.get_look_direction(), up_dir)); + 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_dir, 0.0f); - columns[1] = compose(up_dir, 0.0f); - columns[2] = compose(cross(right_dir, up_dir), 0.0f); - columns[3] = compose(base_camera.get_position(), 1.0f); - GL::Matrix matrix = GL::Matrix::from_columns(columns)*hmd_matrix; + 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));