diff --git a/doc/stereo.html b/doc/stereo.html index 9813b1555..b5b4b675e 100644 --- a/doc/stereo.html +++ b/doc/stereo.html @@ -1,194 +1,213 @@ - + - - - OSG Documentation + stereo + + - - -

-Stereo

-The OSG has support for stereo out of the box. Currently both anaglyphic -stereo (i.e. red/green or red/cyan glasses) and quad buffered stereo (i.e. -active stereo using shutter glasses, or passive stereo using polarized -projectors & glasses). It is planned to extend this support horizontal -and vertical split window stereo implementations. -

Almost all OSG applications have the potential for stereo support simply -by setting the relevant environmental variables, or via command line arguments. -Little or no code changes will be required, the support is handled transparently -inside osgUtil::SceneView's handling of rendering. -

If the user is planning to use head tracked stereo, or a cave then it -is currently recommend to set it up via a VR toolkit such as VRjuggler, -in this case refer to the VR toolkits handling of stereo, and do not invoke -the OSG's native support, i.e. keep all the OSG's stereo specific environment -varibles (below) set to OFF, or set the values to off within own your own -applications. -
-

-The environmental variables of interest:

+ - - - + - +

Native Support for Stereo

- - +

The OSG has support for anaglyphic stereo +(i.e. red/green or red/cyan glasses), quad buffered stereo (i.e. active stereo using shutter glasses, +or passive stereo using polarized projectors & glasses) and horizontal and vertical split window stereo implementations. +Almost all OSG applications have the potential for stereo support simply by setting the relevant environmental variables, or via command line arguments. Little or no code changes will be required, the support is +handled transparently inside osgUtil::SceneView's handling of rendering.It is a simple as: +

+    sgv -stereo cow.osg - - +

If the user is planning to use head tracked stereo, or a cave then it is currently recommend to set it +up via a VR toolkit such as VRjuggler, in this case refer to the VR toolkits handling of stereo, and keep +all the OSG's stereo specific environment variables (below) set to OFF, or set the values to off within own +your own applications. +

+
+

The environmental variables of interest:

- +
OSG_STEREOONturn stereo on.
OSG_STEREOOFF
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
OSG_STEREOON Turn stereo on
OFFTurn stereo off (default).
OSG_STEREO_MODEANAGLYPHIC Use anaglyphic stereo when in stereo (default).
QUAD_BUFFER Use quad buffered stereo when in stereo.
HORIZONTAL_SPLIT Use horizontal split stereo mode when in stereo
VERTICAL_SPLIT Use vertical split stereo mode when in stereo
OSG_SCREEN_DISTANCE 0.50 Set the distance the viewer is from screen in metres (default shown)
OSG_SCREEN_HEIGHT 0.26 Set the height if image on the screen in metres (default shown)
OSG_EYE_SEPERATION 0.06 Set the eye seperation - interoccular distance (default shown.)
OSG_SPLIT_STEREO_HORIZONTAL_SEPERATION 42 Set the number of pixels betweent the left and right viewports (default shown).
OSG_SPLIT_STEREO_HORIZONTAL_EYE_MAPPING LEFT_EYE_LEFT_VIEWPORT Set the left eye to render to left viewport, right eye to right viewport (default).
LEFT_EYE_RIGHT_VIEWPORT Set the left eye to render to right viewport, right eye to left viewport.
OSG_SPLIT_STEREO_VERTICAL_SEPERATION 42 Set the number of pixels betweent the top and bottom viewports (default shown).
OSG_SPLIT_STEREO_VERTICAL_EYE_MAPPING LEFT_EYE_TOP_VIEWPORT Set the left eye to render to top viewport, right eye to bottom viewport (default).
LEFT_EYE_BOTTOM_VIEWPORT Set the left eye to render to bottom viewport, right eye to top viewport.
-turn stereo off (default) - +
- -OSG_STEREO_MODE +

Command line arguments can be used to override these settings:

-ANAGLYPHIC - -use anaglyphic stereo when in stereo (default). - - - -OSG_STEREO_MODE - -QUAD_BUFFER - -use quad buffered stereo when in stereo. - - - -OSG_SCREEN_DISTANCE - -0.50 - -set the distance the viewer is from screen in metres (default shown) - - - -OSG_SCREEN_HEIGHT - -0.26 - -set the height if image on the screen in metres (default shown) - - - -OSG_EYE_SEPERATION - -0.05 - -set the eye seperation - interoccular distance (default shown.) - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
-stereo Switch on stereo.
-stereoON Switch on stereo.
OFF Switch off stereo.
ANAGLYPHIC Switch on ANAGLYPHIC stereo.
QUAD_BUFFER Switch on QUAD_BUFFER stereo.
VERTICAL_SPLIT Switch on VERTICAL_SPLIT stereo.
HORIZONTAL_SPLIT Switch on VERTICAL_SPLIT stereo.
-
-

-Command line arguments can be used to override these settings:

- - - - +
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-stereoSwitch on stereo.
-stereoONSwitch on stereo.
-stereoOFFSwitch off stereo.
-stereoANAGLYPHICSwitch on ANAGLYPHIC stereo.
-stereoQUAD_BUFFERSwitch on QUAD_BUFFER stereo.
-
-

-Examples:

-To invoke stereo from the comandline: -
    sgv -stereo cow.osg -

To invoke quad buffered stereo from the commandline: -
    sgv -stereo QUAD_BUFFER cow.osg +

Examples:

+ To invoke stereo from the comandline:
+    sgv -stereo cow.osg +

To invoke quad buffered stereo from the commandline:
+    sgv -stereo QUAD_BUFFER cow.osg

To force all apps to start up in quad buffered stereo (if system supports -it) -
    export OSG_STEREO=ON -
    export OSG_STEREO_MODE=QUAD_BUFFER -
    sgv cow.osg -

To set quad buffered stereo to the default, but use the commandline -to switch stereo on: -
    export OSG_STEREO=OFF -
    export OSG_STEREO_MODE=QUAD_BUFFER -
    sgv -stereo cow.osg -
  -

-Size matters:

-For appropriate depth perception the stereo code creates separate left -and eye views, both the frustum and modelview are shifted to account for -the separate eye views.  To achieve the right amount of adjustment -the OSG requires the users eye separation, the distance from the eyes to -the screen and the height of the screen.  The OSG will use the defaults -of 0.05m,0.5m and 0.26m respectively which are assumed to be reasonable -defaults for most users workstation configurations, note the OSG_SCREEN_HEIGHT -is the image height rather than total size of your monitor/display surface.  -For the best stereo effects please measure these values and set them up -via the environmental variables.  Once set the views you get should -give improved depth perception.  A good way of measuring how well you are -configured for your display is to fly away from objects (using the FlightManipulator -for instance, but not the TrackballManipulator, see below) so that they go of -toward infinity. As they move away the offset between the two images should -tend towards your eye separation, if you achieve this then the object will -be perceived as at infinity. -
  -
  -

-Camera Manipulator Modes:

-There are three osgUtil::CameraManipulator's which come with osgUtil, which -operate as a Trackball, Drive and Flight modes of interaction (see sgv.html for -how to invoke them in the scene graph viewer). The osgUtil::Trackball -Manipulator automatically scales the fusion distance to that which will fusion on -center point of rotation - this will appear at the middle of the monitor at -the monitors depth. Whereas, the osgUtil::DriveManipualtor, osgUtil::FlightManipulator -scale the fusion distance to the distance the viewer is from the screen, the -results in a perception that the virtual world is scaled to physical world, this -is clearly better for simulators and alike. You can control the fusion of -the image in these two modes via the osg::Camera::setFusionDistanceMode(FusionDistanceMode mode) -where mode can be osg::Camera::PROPORTIONAL_TO_LOOK_DISTANCE (used by Trackball) or -osg::Camera::PROPORTIONAL_TO_SCREEN_DISTANCE (used by Drive and Flight), -and osg::Camera::setFusionDistanceRatio(float). See include/osg/Camera for -further details, and the camera manipulators for implementation details. The -fusion distance ratio defaults to 1.0 but can be biased to move objects out or -into screen, they will also appear to get smaller and larger respectively. The -camera manipulators allow the user to alter this value at runtime via the '+' -and '-' keys. + it)
+    export OSG_STEREO=ON
+    export OSG_STEREO_MODE=QUAD_BUFFER
+    sgv cow.osg

+

To set quad buffered stereo to the default, but use the commandline to + switch stereo on:
+    export OSG_STEREO=OFF
+    export OSG_STEREO_MODE=QUAD_BUFFER
+    sgv -stereo cow.osg
+  

+ +
+ +

Size matters:

+

For appropriate depth perception the stereo code creates separate left +and eye views, both the frustum and modelview are shifted to account for +the separate eye views.  To achieve the right amount of adjustment the +OSG requires the users eye separation, the distance from the eyes to the screen +and the height of the screen.  The OSG will use the defaults of 0.05m,0.5m +and 0.26m respectively which are assumed to be reasonable defaults for most +users workstation configurations, note the OSG_SCREEN_HEIGHT is the image +height rather than total size of your monitor/display surface.  For +the best stereo effects please measure these values and set them up via the +environmental variables.  Once set the views you get should give improved +depth perception.  A good way of measuring how well you are configured +for your display is to fly away from objects (using the FlightManipulator +for instance, but not the TrackballManipulator, see below) so that they +go of toward infinity. As they move away the offset between the two images +should tend towards your eye separation, if you achieve this then the object +will be perceived as at infinity.

+ +
+ +

Camera Manipulator Modes:

+

There are three osgUtil::CameraManipulator's which come with osgUtil, +which operate as a Trackball, Drive and Flight modes of interaction (see +sgv.html for how to invoke them in the scene graph viewer). The osgUtil::Trackball +Manipulator automatically scales the fusion distance to that which will +fusion on center point of rotation - this will appear at the middle of the +monitor at the monitors depth. Whereas, the osgUtil::DriveManipualtor, osgUtil::FlightManipulator +scale the fusion distance to the distance the viewer is from the screen, +the results in a perception that the virtual world is scaled to physical +world, this is clearly better for simulators and alike. You can control +the fusion of the image in these two modes via the osg::Camera::setFusionDistanceMode(FusionDistanceMode +mode) where mode can be osg::Camera::PROPORTIONAL_TO_LOOK_DISTANCE (used +by Trackball) or osg::Camera::PROPORTIONAL_TO_SCREEN_DISTANCE (used by +Drive and Flight), and osg::Camera::setFusionDistanceRatio(float). See +include/osg/Camera for further details, and the camera manipulators for +implementation details. The fusion distance ratio defaults to 1.0 but +can be biased to move objects out or into screen, they will also appear +to get smaller and larger respectively. The camera manipulators allow +the user to alter this value at runtime via the '+' and '-' keys.

+ -
  -