X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fheadtrackingcamera.cpp;h=86d6e24427d1ad2d1b08f9974be5a9b54ac16af8;hb=a0a8e3a7c5a229dcccd1af3a3edeac5ba8156954;hp=42eedd5d90caa21543776a47d95049069b99e587;hpb=0b9fa4d7eb2acb22f5f4f31bbd508d0216421108;p=libs%2Fvr.git diff --git a/source/headtrackingcamera.cpp b/source/headtrackingcamera.cpp index 42eedd5..86d6e24 100644 --- a/source/headtrackingcamera.cpp +++ b/source/headtrackingcamera.cpp @@ -15,7 +15,14 @@ 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(), 1.0f); + GL::Matrix matrix = GL::Matrix::from_columns(columns)*hmd_matrix; set_position(matrix*GL::Vector3()+base_camera.get_up_direction()*elevation_offset); set_look_direction((matrix*GL::Vector4(0, 0, -1, 0)).slice<3>(0));