Currently the app supports a number of different types of manipulation, depending on the camera mode. These are demonstrated in the following short video and summarised below.
Video 1. Touch Manipulation used for camera control, recorded on a Microsoft Surface 2.0.
Free Camera
- Pitch and Yaw by moving one or more touchpoints on the background
- Roll by rotating two or more touchpoints on the background
Orbit Camera
- Orbit body by moving one or more touchpoints on the background
- Roll by rotating two or more touchpoints on the background
- Adjust distance to body by pinch-zooming two or more touchpoints on the background
Geosync Camera
- Roll by rotating two or more touchpoints on the background
- Adjust distance to body by pinch-zooming two or more touchpoints on the background
Tracking Camera
- Roll by rotating two or more touchpoints on the background
As shown in the video, when time is running, an orbit camera travels with the body, maintaining constant orientation so that the background stars remain fixed. The geosync camera always points at a specific coordinate on the body, and maintains a constant north bearing.
Smoothing
Touch resolutions oftern correspond to approximately the screen resolution in pixels, hence smoothing is necessary to avoid "jumps" in orientation or position. Also of importance is the use of momentum and inertia to provide a more "natural" touch experience.
I initially used a simple spring algorithm to add smoothing, momentum and inertia, and tracked manipulation speed to continue inertia when manipulation ended. This worked well at high framerates, but when using vertical sync (i.e. 60fps) the experience degraded.
Switching to a simple linear interpolation (LERP) of position and spherical linear interpolation (SLERP) for orientation bahaves well at lower frame-rates, and also gives the impression of momentum and inertia. I no longer track manipulation speed, nor continue inertia when the interpolation is complete.
Add Comment