What does it mean to "fly" over a virtual terrain? Some users will want to "walk" over the ground. "Walk" can mean moving slowly at a low, fixed height over the terrain. Some will want to "fly" using the conventional dynamics of an airplane or helicopter, especially if they're used to using a flight simulation.
In fact, there are huge number of useful ways in which to implement navigation in a 3D scene, and even some academic literature on the subject.
- Exploring 3D Navigation: Combining Speed-coupled Flying with Orbiting (pdf), Tan, Robertson, Czerwinski, 2001. Gives an excellent overview of many of the approaches, along with their benefits and drawbacks.
Generally speaking, 3D interfaces suffer from a wide range of different conventions, much more so than 2D interfaces, which have well-established conventions for a GUI. 3D interfaces are even more domain-specific, and must fit with the expertise of the user. For example, a novice user given a 6 DOF (degree of freedom) UI will often become upside-down and lost, whereas an experienced user given a high-constrained UI (say, only zoom and pan) will quickly become frustrated.
In fact, because 3D user interfaces are so diverse and idiosyncratic, people tend to learn the first interfaces they are exposed to, and subsequently find any other interface difficult. The only solutions are:
- Give users a multiple choice. That way they can pick an interface that is closest to what they already know and like.
- Display plenty of on-screen guides for the controls, which the user can turn off once they've gotten used to it.
As an experienced developer with realtime 3D terrain, i find that a simple, minimally constrained mode of flying is most useful. It should allow at least yaw and pitch control, as well as moving up/down and forward/backward. This is what is implemented in Enviro, in the library vtlib as
vtTerrainFlyer: Simple Mouse Navigation. In the default usage, there are 5 DOF (everything except roll) with smooth variable control using two mouse buttons.