Better interactive camera controls
Better interactive camera controls

These controls should match the behavior of Google/Apple Maps
(except for being able to drag around on the map to change
the X/Z coordinates). They are definately easier to use
than the previous controls.

The central concept is that there is a triangle formed
between a central point in the city, and the camera,
which is some distance/angle away from the center point:

     C
    /|
   / |
  /  |
 /   |
X----|

Above, "X" is the center point, and "C" is the camera position.

Changing the "zoom" parameter changes the length of the
hypotenuse, and changing the "rotation X" parameter changes
the angle from the center point to the camera. From those
two user provided values, the horizontal distance from the
center point (i.e. the adjacent leg or the X/Z camera
coordinates) and the height above the ground (i.e. the
opposite leg or the Y coordinate) can be determined via
trigonometry.

The "rotation Y" parameter determines the rotation of
the triangle above around the Y-axis of the center point.

In the future, a way to change the center point (for example
by "dragging" the map around) could be added. But in this
commit, the center point is always {0, 0}.

jstrait/webgl-city,jstrait/webgl-city