X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fcameracontroller.cpp;h=ef0020081dbc1652bd66dd97b278db36defb49a7;hb=1a213318d4f26ef7bc3a82fc805ecbfec9f1c74a;hp=f8d1a53b8b1b6279cfc97441d417eaa0ad877e18;hpb=54d520566470a4b21b2a6eac3e2943d6305dcfa1;p=r2c2.git diff --git a/source/designer/cameracontroller.cpp b/source/designer/cameracontroller.cpp index f8d1a53..ef00200 100644 --- a/source/designer/cameracontroller.cpp +++ b/source/designer/cameracontroller.cpp @@ -37,7 +37,7 @@ void CameraController::set_look_direction(const GL::Vector3 &look) GL::Vector3 focus = get_focus(); float dist = get_distance(); camera.set_look_direction(look); - camera.set_position(GL::Vector3(focus.x-look.x*dist, focus.y-look.y*dist, focus.z-look.z*dist)); + camera.set_position(focus-look*dist); } void CameraController::view_all() @@ -49,10 +49,9 @@ void CameraController::move(float x, float y) { const GL::Vector3 &pos = camera.get_position(); const GL::Vector3 &look = camera.get_look_direction(); - float xy_len = sqrt(look.x*look.x+look.y*look.y); - float dx = (look.x*y+look.y*x)/xy_len; - float dy = (look.y*y-look.x*x)/xy_len; - camera.set_position(GL::Vector3(pos.x+dx, pos.y+dy, pos.z)); + GL::Vector3 fwd_dir = normalize(GL::Vector3(look.x, look.y, 0)); + GL::Vector3 right_dir = cross(fwd_dir, GL::Vector3(0, 0, 1)); + camera.set_position(pos+fwd_dir*y+right_dir*x); } void CameraController::adjust_distance(float delta) @@ -60,23 +59,22 @@ void CameraController::adjust_distance(float delta) const GL::Vector3 &pos = camera.get_position(); const GL::Vector3 &look = camera.get_look_direction(); float dist = get_distance(); - float low = view.get_layout().get_layout().get_catalogue().get_gauge()*5; + // XXX This should probably depend on the layout contents in some way + float low = 0.1; if(dist+delta