Zoom kinda works.

It also suffers from the rotation errors.  I think the LookAt function
might be the cause of this.
That or my matrices are wrong.  This is probably more likely...