This chapter contains some special graphics configuration examples.

It assumes that you've built Syzygy with dynamic linking (i.e., not with g++ in Windows).

Defining a Virtual Cube in a Single Window (Using Viewports)

Sometimes, for debugging purposes, it might be convenient to be able to see, in a single window, most of the screens (in this case 5 out of 6) in an immersive virtual environment. This lets us make sure that are camera projection code is doing the right thing with minimal hassle and also gives an interesting visual effect. We now explore how to create such a custom graphics configuration. In this case, we show the XML config for a "virtual cube", where the viewports are the front, top, bottom, left, and right walls of a CAVE-style environment. Note how the XML "pointers" are used to refer from inside "virtual_cube_window" to appropriate screen configs.

  <param>
  <name> front_wall </name>
  <value>
  <szg_screen>
    <center x="0" y="4.93" z="-4.93" />
    <up x="0" y="1" z="0" />
    <dim width="9.86" height="9.86" />
    <normal x="0" y="0" z="-1" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> right_wall </name>
  <value>
  <szg_screen>
    <center x="4.93" y="4.93" z="0" />
    <up x="0" y="1" z="0" />
    <dim width="9.86" height="9.86" />
    <normal x="1" y="0" z="0" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> left_wall </name>
  <value>
  <szg_screen>
    <center x="-4.93" y="4.93" z="0" />
    <up x="0" y="1" z="0" />
    <dim width="9.86" height="9.86" />
    <normal x="-1" y="0" z="0" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> top_wall_unrotated </name>
  <value>
  <szg_screen>
    <center x="0" y="9.86" z="0" />
    <up x="0" y="0" z="1" />
    <dim width="9.86" height="9.86" />
    <normal x="0" y="1" z="0" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> bottom_wall </name>
  <value>
  <szg_screen>
    <center x="0" y="0" z="0" />
    <up x="0" y="0" z="-1" />
    <dim width="9.86" height="9.86" />
    <normal x="0" y="-1" z="0" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name>virtual_cube_window</name>
  <value>
  <szg_display>
   <szg_window>
     <size width="600" height="600" />
     <position x="50" y="50" />
     <decorate value="true" />
     <fullscreen value="false" />
     <title value="szg" />
     <stereo value="false" />
     <topmost value="false" />
     <xdisplay value="" />
     <szg_viewport_list viewmode="custom">
       <szg_viewport>
         <depthclear value="false" />
         <colormask R="true" G="true" B="true" A="true" />
         <ogldrawbuf value="GL_BACK_LEFT" />
         <eyesign value="0" />
         <coords left="0.3333" bottom="0.3333" width="0.3333" height="0.3333" />
         <szg_camera>
           <szg_screen usenamed="front_wall" />
         </szg_camera>
       </szg_viewport>
       <szg_viewport>
         <eyesign value="0" />
         <coords left="0.6666" bottom="0.3333" width="0.3333" height="0.3333" />
         <szg_camera>
           <szg_screen usenamed="right_wall" />
         </szg_camera>
       </szg_viewport>
       <szg_viewport>
         <eyesign value="0" />
         <coords left="0" bottom="0.3333" width="0.3333" height="0.3333" />
         <szg_camera>
           <szg_screen usenamed="left_wall" />
         </szg_camera>
       </szg_viewport>
       <szg_viewport>
         <eyesign value="0" />
         <coords left="0.3333" bottom="0.6666" width="0.3333" height="0.3333" />
         <szg_camera>
           <szg_screen usenamed="top_wall_unrotated" />
         </szg_camera>
       </szg_viewport>
       <szg_viewport>
         <eyesign value="0" />
         <coords left="0.3333" bottom="0" width="0.3333" height="0.3333" />
         <szg_camera>
           <szg_screen usenamed="bottom_wall" />
         </szg_camera>
       </szg_viewport>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>

Of course, to use the virtual cube window (by default) on a computer, you will want the following local parameter in the Syzygy database:

  the_computer_name SZG_DISPLAY0 name virtual_cube_window

Inside the "virtual_cube_window" XML, note how the szg_viewport_list element has a viewmode attribute with value "custom". This tells Syzygy to look for szg_viewport children of the szg_viewport_list element. Each describes a viewport of the window into which a view of the scene will be drawn. The viewports are drawn in order of their appearance and can overlap. For instance, anaglyph stereo can be implemented with overlapping viewports, color masking, and depth buffer manipulation.

  <coords left="0.3333" bottom="0.3333" width="0.3333" height="0.3333" />

The viewport's coordinates are relative to the window. The window's lower left corner has coordinates (0,0), the upper right (1,1). So the width and height of the full window are both 1. This parameter defaults to 0/0/1/1.

  <colormask R="true" G="true" B="true" A="true" />

The OpenGL color mask to be applied to the window, e.g. for doing anaglyphic stereo. The color mask values are given in RGBA order, and must be either "true" or "false". In the example here, only the red value of the scene's pixels will be drawn. The default is "true/true/true/true", which draws the scene normally.

  <depthclear value="false" />

When multiple passes of the same scene are drawn on the same part of the screen (as in anaglyphic stereo), the second pass must clear the depth buffer before drawing. Iff this parameter is "true," the depth buffer will be cleared before drawing. The default is "false".

  <ogldrawbuf value="GL_BACK_LEFT" />

The OpenGL buffer into which the viewport draws, by default GL_BACK_LEFT.

  <eyesign value="0" />

The eyesign (i.e. right eye, left eye, or eye midpoint). The default is 0, the midpoint; 1 means the right eye; and -1 means the left eye.

Passive Stereo

Syzygy supports a variety of passive stereo configurations. One of them, "walleyed", is suited to working with dual-headed graphics cards under Windows. Many of these cards can be set up so that the Windows desktop extends across both monitors and a single hardware accelerated OpenGL window can cover the whole thing. Under this scenario, a full screen window, with a left eye view on one half and the right eye view on the other half, can provide passive stereo. Simply hook up projectors to each of the card's outputs, put polarizing filters on each, and project onto the same screen. You can then use cheap stereo glasses (based on polarized light) to see the visualization in 3D. The following configuration shows how to do this.

  <param>
  <name>passive_stereo</name>
  <value>
  <szg_display threaded="false">
   <szg_window>
     <size width="600" height="600" />
     <position x="0" y="0" />
     <decorate value="false" />
     <fullscreen value="true" />
     <cursor value="none" />
     <stereo value="false" />
     <zorder value="topmost" />
     <szg_viewport_list viewmode="walleyed">
       <szg_camera>
         <szg_screen>
           <center x="0" y="5" z="-5" />
           <up x="0" y="1" z="0" />
           <dim width="13.33" height="10" />
           <normal x="0" y="0" z="-1" />
           <headmounted value="false" />
         </szg_screen>
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>

Easy Demo Passive Stereo Display in Standalone Mode

Since passive stereo displays are so easy to set up and so cheap, given how common dual headed video game graphics cards are, they are ideal for travelling demos, like one might bring to a conference or trade show. One consideration with demo system design is tracking, since, in the interests of simplicity, one would like to avoid it all together. Tracking can be of marginal benefit in such situations.

Consequently, a simple demo system might skip tracking altogether in favor of gamepad control. Syzygy VR framework applications often assume their input device provides them with a matrix giving head position and orientation (matrix 0) and a matrix giving wand (manipulation device) position and orientation (matrix 1). Navigation in the world is accomplished by a combination of wand matrix plus button pushes and axis manipulation. In many cases, leaving the wand matrix in a default (identity matrix) position still allows for sufficient navigation for a successdul demo. However, the head matrix often needs to go into a non-default position (not (0,0,0)) to have things appear sensibly on screen.

To fix this problem, we construct a PForth filter that, when processing an event from the gamepad, creates an additional (and spurious) head matrix event, putting the head in the desired default position.

The following dbatch file ("complex" format) gives a Standalone Mode configuration for a demo system as described above. Note that the lone global parameter gives a PForth program instead of a full input node configuration. In Standalone Mode, Syzygy VR framework applications either use an embedded inputsimulator to generate input events or rely on joystick input. The value of SZG_DEMO/control_mode (either "joystick" or "normal", which is the default) determines the control scheme used. Also, SZG_PFORTH/program_names gives the name of the global parameter holding the PForth program to be applied, if any.

The "joystick" PForth program listed, of course, pertains to a particular gamepad. However, it does illustrate how to switch axes around. For instance, it addition to rescaling, axis 2 is mapped to axis 3 and axis 5 is mapped to axis 2.

In examining the config file given below, remember that "NULL", when used as a computer name, is a wildcard refering to whatever computer one is currently executing upon.

<szg_config>
  <param>
    <name> joystick </name>
    <value>

      /* Declare a 4x4 matrix variable named 'temp' */
      matrix fixHeadMatrix
      /* Store a y += 5 translation in temp */
      0 5 0 fixHeadMatrix translationMatrix

      /* Define a number of 'filter' words. For each incoming input
         event, it checks to see whether a filter word with the
         appropriate event type and index in its name exists
         and calls it (e.g. filter_axis_0) is called whenever
         an axis event #0 comes in) */
      define filter_axis_0
        /* Rescale the axis event (presumably to map it to [-1,1]) */
        getCurrentEventAxis 0.000031 * setCurrentEventAxis
      enddef

      define filter_axis_1
        /* Create a new matrix #0 (i.e. head) event placing the
           head at y = 5. */
        fixHeadMatrix 0 insertMatrixEvent
        getCurrentEventAxis -0.000031 * setCurrentEventAxis
      enddef

      define filter_axis_2
        getCurrentEventAxis -32768 + -0.000031 * setCurrentEventAxis
        /* Change the current event's index from 2 to 3 */
        3 setCurrentEventIndex
      enddef

      define filter_axis_5
        getCurrentEventAxis -32768 + 0.000031 * setCurrentEventAxis
        2 setCurrentEventIndex
      enddef

    </value>
  </param>

  <param>
    <name>passive_stereo</name>
    <value>
      <szg_display threaded="false">
       <szg_window>
         <size width="600" height="600" />
         <position x="0" y="0" />
         <decorate value="false" />
         <fullscreen value="true" />
         <cursor value="none" />
         <stereo value="false" />
         <zorder value="topmost" />
         <szg_viewport_list viewmode="walleyed">
           <szg_camera>
             <szg_screen>
               <center x="0" y="5" z="-5" />
               <up x="0" y="1" z="0" />
               <dim width="13.33" height="10" />
               <normal x="0" y="0" z="-1" />
               <headmounted value="false" />
             </szg_screen>
           </szg_camera>
         </szg_viewport_list>
       </szg_window>
      </szg_display>
    </value>
  </param>

  <assign>
    NULL SZG_DATA path ./
    NULL SZG_STANDALONE input_config joystick
    NULL SZG_DISPLAY0 name passive_stereo
  </assign>
</szg_config>

Fixed-Display Virtual Environments

An early supported Syzygy configuration was one stereo window per PC, with each window supporting one wall of an immersive virtual environment. The following text shows screen definitions (plus a virtual computer employing them) for a six-walled virtual environment. See Cluster Mode for a discussion of virtual computers.

  <szg_config>
  <assign>
  cube SZG_CONF    location       cube
  cube SZG_CONF    virtual        true
  cube SZG_TRIGGER map            air
  cube SZG_MASTER  map            SZG_DISPLAY2
  cube SZG_DISPLAY  number_screens 6
  cube SZG_DISPLAY0 map            top/SZG_DISPLAY0
  cube SZG_DISPLAY0 networks       internet
  cube SZG_DISPLAY1 map            bottom/SZG_DISPLAY0
  cube SZG_DISPLAY1 networks       internet
  cube SZG_DISPLAY2 map            north/SZG_DISPLAY0
  cube SZG_DISPLAY2 networks       internet
  cube SZG_DISPLAY3 map            south/SZG_DISPLAY0
  cube SZG_DISPLAY3 networks       internet
  cube SZG_DISPLAY4 map            east/SZG_DISPLAY0
  cube SZG_DISPLAY4 networks       internet
  cube SZG_DISPLAY5 map            west/SZG_DISPLAY0
  cube SZG_DISPLAY5 networks       internet
  cube SZG_INPUT0  map            air/cube_tracker/joystick/cube_joystick
  cube SZG_INPUT0  networks       internet
  top SZG_DISPLAY0 name top_window_stereo
  bottom SZG_DISPLAY0 name bottom_window_stereo
  north SZG_DISPLAY0 name north_window_stereo
  south SZG_DISPLAY0 name south_window_stereo
  east SZG_DISPLAY0 name east_window_stereo
  west SZG_DISPLAY0 name west_window_stereo
  </assign>
  <param>
  <name> front_wall </name>
  <value>
  <szg_screen>
    <center x="0" y="4.93" z="-4.93" />
    <up x="0" y="1" z="0" />
    <dim width="9.86" height="9.86" />
    <normal x="0" y="0" z="-1" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> right_wall </name>
  <value>
  <szg_screen>
    <center x="4.93" y="4.93" z="0" />
    <up x="0" y="1" z="0" />
    <dim width="9.86" height="9.86" />
    <normal x="1" y="0" z="0" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> left_wall </name>
  <value>
  <szg_screen>
    <center x="-4.93" y="4.93" z="0" />
    <up x="0" y="1" z="0" />
    <dim width="9.86" height="9.86" />
    <normal x="-1" y="0" z="0" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> rear_wall </name>
  <value>
  <szg_screen>
    <center x="0" y="4.93" z="4.93" />
    <up x="0" y="1" z="0" />
    <dim width="9.86" height="9.86" />
    <normal x="0" y="0" z="1" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> top_wall </name>
  <value>
  <szg_screen>
    <center x="0" y="9.86" z="0" />
    <up x="-1" y="0" z="0" />
    <dim width="9.86" height="9.86" />
    <normal x="0" y="1" z="0" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="-90" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> bottom_wall </name>
  <value>
  <szg_screen>
    <center x="0" y="0" z="0" />
    <up x="0" y="0" z="-1" />
    <dim width="9.86" height="9.86" />
    <normal x="0" y="-1" z="0" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="1" tiley="0" numtilesy="1" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.5" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name>front_window_stereo</name>
  <value>
  <szg_display framelock="wgl">
   <szg_window>
     <decorate value="false" />
     <fullscreen value="true" />
     <stereo value="true" />
     <zorder value="topmost" />
     <cursor value="none" />
     <szg_viewport_list viewmode="normal">
       <szg_camera>
         <szg_screen usenamed="front_wall" />
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>
  <param>
  <name>right_window_stereo</name>
  <value>
  <szg_display framelock="wgl">
   <szg_window>
     <decorate value="false" />
     <fullscreen value="true" />
     <stereo value="true" />
     <zorder value="topmost" />
     <cursor value="none" />
     <szg_viewport_list viewmode="normal">
       <szg_camera>
         <szg_screen usenamed="right_wall" />
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>
  <param>
  <name>left_window_stereo</name>
  <value>
  <szg_display framelock="wgl">
   <szg_window>
     <decorate value="false" />
     <fullscreen value="true" />
     <stereo value="true" />
     <zorder value="topmost" />
     <cursor value="none" />
     <szg_viewport_list viewmode="normal">
       <szg_camera>
         <szg_screen usenamed="left_wall" />
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>
  <param>
  <name>rear_window_stereo</name>
  <value>
  <szg_display framelock="wgl">
   <szg_window>
     <decorate value="false" />
     <fullscreen value="true" />
     <stereo value="true" />
     <zorder value="topmost" />
     <cursor value="none" />
     <szg_viewport_list viewmode="normal">
       <szg_camera>
         <szg_screen usenamed="rear_wall" />
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>
  <param>
  <name>top_window_stereo</name>
  <value>
  <szg_display framelock="wgl">
   <szg_window>
     <decorate value="false" />
     <fullscreen value="true" />
     <stereo value="true" />
     <zorder value="topmost" />
     <cursor value="none" />
     <szg_viewport_list viewmode="normal">
       <szg_camera>
         <szg_screen usenamed="top_wall" />
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>
  <param>
  <name>bottom_window_stereo</name>
  <value>
  <szg_display framelock="wgl">
   <szg_window>
     <decorate value="false" />
     <fullscreen value="true" />
     <stereo value="true" />
     <zorder value="topmost" />
     <cursor value="none" />
     <szg_viewport_list viewmode="normal">
       <szg_camera>
         <szg_screen usenamed="bottom_wall" />
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>
  </szg_config>

Head-Mounted Displays

Syzygy's first application in Spring 2000 was a cluster-driven HMD, with a seperate consumer PC driving each eye. This configuration is still supported, along with a single PC set up, where two viewports in a single window give left eye and right eye views, respectively. For a head-mounted display, simply change the "headmounted" element value to "true" in the config file in the Easy Demo Passive Stereo Display in Standalone Mode section.

Multiple Displays on a Single Computer

Sometimes having multiple seperate graphics screens on a single computer is desirable. For instance, in this way, you can run Syzygy applications on an SMP computer (like the SGI Onyx series) with mutliple graphics cards. It also helps when testing whether a Syzygy master/slave application will work properly on a cluster, but without having to have a cluster available.

Note that consumer level graphics cards, as a rule, do not do very well having multiple OpenGL windows active simultaneously. Performance degrades significantly over the equivalent Standalone Mode case where there are multiple viewports in a single window. Indeed, on many common systems, just having a inputsimulator window open (which is a small window with very simple OpenGL graphics) in addition to an application window severely degrades application performance. This is actually why Standalone Mode was originally invented: to deal with the limitations of Syzygy application development on very low end hardware.

Of course, these performance conisderations DO NOT apply to the high end computers with multiple graphics cards and processors that are designed to run these types of applications (again like an SGI Onyx or, say, a 4-way Linux box with multiple graphics cards).

The following dbatch file defines a virtual computer "smoke_test" which has four screens and uses a inputsimulator for an input device. These screens give a 2x2 tiled display and are automatically placed in the proper arrangement upon launch, through the SZG_DISPLAY(n)/position parameter. Similarly, the inputsimulator is placed to the right of everything, as given by the SZG_INPUTSIM/position parameter. Please note that the desktop in question is 1600x1200. A smaller desktop would need positions and window sizes reduced.

  <szg_config>
  <assign>
  smoke_test SZG_CONF virtual true
  smoke_test SZG_TRIGGER map smoke
  smoke_test SZG_MASTER map SZG_DISPLAY0
  smoke_test SZG_DISPLAY number_screens 4
  smoke_test SZG_DISPLAY0 map smoke/SZG_DISPLAY1
  smoke_test SZG_DISPLAY1 map smoke/SZG_DISPLAY2
  smoke_test SZG_DISPLAY2 map smoke/SZG_DISPLAY3
  smoke_test SZG_DISPLAY3 map smoke/SZG_DISPLAY4
  smoke_test SZG_INPUT0 map smoke/inputsimulator
  smoke SZG_INPUTSIM position 1305/0
  smoke SZG_DISPLAY1 name single_window_3x2_00
  smoke SZG_DISPLAY2 name single_window_3x2_01
  smoke SZG_DISPLAY3 name single_window_3x2_11
  smoke SZG_DISPLAY4 name single_window_3x2_10
  </assign>
  <param>
  <name>single_window_3x2_00</name>
  <value>
  <szg_display>
   <szg_window>
     <size width="400" height="400" />
     <position x="0" y="400" />
     <decorate value="false" />
     <fullscreen value="false" />
     <cursor value="none" />
     <szg_viewport_list viewmode="normal">
       <szg_camera>
         <szg_screen usenamed="front_tile_3x2_00" />
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>
  <param>
  <name> front_tile_3x2_00 </name>
  <value>
  <szg_screen>
    <center x="0" y="5" z="-5" />
    <up x="0" y="1" z="0" />
    <dim width="20" height="10" />
    <normal x="0" y="0" z="-1" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="3" tiley="0" numtilesy="2" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.0" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> front_tile_3x2_10 </name>
  <value>
  <szg_screen>
    <center x="0" y="5" z="-5" />
    <up x="0" y="1" z="0" />
    <dim width="20" height="10" />
    <normal x="0" y="0" z="-1" />
    <headmounted value="false" />
    <tile tilex="1" numtilesx="3" tiley="0" numtilesy="2" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.0" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> front_tile_3x2_11 </name>
  <value>
  <szg_screen>
    <center x="0" y="5" z="-5" />
    <up x="0" y="1" z="0" />
    <dim width="20" height="10" />
    <normal x="0" y="0" z="-1" />
    <headmounted value="false" />
    <tile tilex="1" numtilesx="3" tiley="1" numtilesy="2" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.0" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name> front_tile_3x2_01 </name>
  <value>
  <szg_screen>
    <center x="0" y="5" z="-5" />
    <up x="0" y="1" z="0" />
    <dim width="20" height="10" />
    <normal x="0" y="0" z="-1" />
    <headmounted value="false" />
    <tile tilex="0" numtilesx="3" tiley="1" numtilesy="2" />
    <usefixedhead value="allow" />
    <fixedheadpos x="0.0" y="5.0" z="0.0" />
    <fixedheadupangle value="0.0" />
  </szg_screen>
  </value>
  </param>
  <param>
  <name>single_window_3x2_10</name>
  <value>
  <szg_display>
   <szg_window>
     <size width="400" height="400" />
     <position x="400" y="400" />
     <decorate value="false" />
     <fullscreen value="false" />
     <cursor value="none" />
     <szg_viewport_list viewmode="normal">
       <szg_camera>
         <szg_screen usenamed="front_tile_3x2_10" />
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>
  <param>
  <name>single_window_3x2_11</name>
  <value>
  <szg_display>
   <szg_window>
     <size width="400" height="400" />
     <position x="400" y="0" />
     <decorate value="false" />
     <fullscreen value="false" />
     <cursor value="none" />
     <szg_viewport_list viewmode="normal">
       <szg_camera>
         <szg_screen usenamed="front_tile_3x2_11" />
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>
  <param>
  <name>single_window_3x2_01</name>
  <value>
  <szg_display>
   <szg_window>
     <size width="400" height="400" />
     <position x="0" y="0" />
     <decorate value="false" />
     <fullscreen value="false" />
     <cursor value="none" />
     <szg_viewport_list viewmode="normal">
       <szg_camera>
         <szg_screen usenamed="front_tile_3x2_01" />
       </szg_camera>
     </szg_viewport_list>
   </szg_window>
  </szg_display>
  </value>
  </param>
  </szg_config>