$LastChangedDate: 2009-12-06 22:22:01 -0500 (Sun, 06 Dec 2009) $

Module to define a window and views.

The purpose of this module is to serve as a layer to allow app-level code
to manipulate views independent of the graphics system.

-----------------------------------------------------------------------------------------
Abstraction:    Window   -->  View      -->  Observer Matrix  --> Viewpoint / View Matrix
Implementation: osg::Viewer   osg::Camera                         modelview matrix
-----------------------------------------------------------------------------------------

Window class contains Views, defines the scene graph, executes main loop, broadcasts draw events.
Window automatically creates the main view.
Window is based on OSG::Viewer.

View defines both a 2D viewport and 3D viewpoint.
The order of rendering Views is the same order Views were attached to Window.
View is based on osg::Camera.

Logical views are composed with a View and a Viewpoint object.
Viewpoint is a functor containing an algorithm to compute the view matrix
which is called before rendering a new frame.
This composition can be changed dynamically using View::SetViewpoint()
to allow switching to different view modes (first-person, chase-plane, etc).
Despite the view appearing to change, View keeps the same underlying osg::Camera object.

View Matrix:
------------
The View Matrix directly corresponds to the OpenGL modelview matrix.
It is computed from an abstract Observer Matrix and the current view mode.
For example, the View Matrix will be computed appropriately for OTW_FRONT or OTW_LEFT
(the Observer Matrix exists independently of view modes).

The coordinates of the origin of the View Matrix are negative
(so is osg::Camera's view matrix).

Observer and Observer Matrix:
-----------------------------
In general terms, every view in the scene has an "observer" object
such as the player's craft, a chase-plane, a matrix, a manipulator's position.
The abstract observer is defined by an Observer Matrix
which is converted to a View Matrix to render a view.
