Navigation on a virtual terrain

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.

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:

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.