- 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);