VRManager : Immersive Virtual Reality Abstraction Framework
[Under Construction]



See our I3D 2005 poster

Introduction

VRManager is an abstraction framework designed to simplify the process of integrating single or multiple tracking systems and displays into virtual reality applications. It uses a simple and flexible XML configuration format to define the relationships between tracking systems and the real world, and provides a very simple API for accessing tracking information. VRManager allows the end programmer to draw objects in real world coordinates without having to worry about the location of either user or viewport.

Motivation

There is an abundance of custom-built virtual reality applications, with each reinventing the algorithms involved in interpreting tracking information and displaying accurate projections. VR programming should be focused on the creation and presentation of content, rather than the management of tracking and projection information. VRManager is designed to be flexible enough to fit into any application and assume the task of integrating tracking information and configuring projection matrices. It also greatly simplifies the process of configuring a VR system by automating input of coordinates and transformations for VR elements. ...allows multiple users and applications to share common information such as screen locations and tracker systems, while

Downloads

Download source code here
Debian-style linux binaries are available for i386 and amd64 by adding the following line to your /etc/apt/sources.list file:
deb http://thunderlab.mines.edu/packages current main


Related work



Features



API

VRmanager's API is quite simple:
      // Create a VRManager object given an XML configuration file
    VRManager("config_file.xml") vrm;
    
      // Request the location of a pointer by name
    Vector pointerPosition = vrm.getPointerLocation("pointerName");
    
      // Or, request the transformation matrix of the pointer instead
    Matrix pointerTransform = vrm.getPointerTransform("pointerName");

      // Head-tracked rendering is simple too
      // all you need to do is set up your projection matrix and begin drawing
    glLoadMatrixf( vrm.getGlProjectionMatrix( "eyeName", "viewportName", nearClipPlane, farClipPlane );
    
There are many other useful API calls, but these are the most important.

Configuration:

VRManager's XML configuration is easy and flexible:
    <vrmanager>

      <!-- All programs tend to use a different coordinate system,
           this feature allows you to define the reationship between
           the program's coordinate system and the real world -->
   
      <coordSystem>
        <translate vector="2.7, 5.4, 1.3"/>
        <scale vector="1, 1, 1"/>
        <rotate angle="270" axis="0, 0, 1"/>
      </coordSystem>

      <!-- Currently only VRPN tracking systems are supported -->
      <trackerSystem type="vrpn_tracker" name="Tracker0@hiball">
        
          <!-- Each tracking system has its own coordinate system -->
        
        <coordSystem>
          <translate vector="0, 0, 0"/>
        </coordSystem>
        
          <!-- Multiple trackers are allowed, and any number of points relative to the tracker
               can be defined and referenced by name -->        
        
        <tracker id="0">
          <pointer name="eye_left" vector="-0.020, 0.08, -0.17"/>
          <pointer name="eye_right" vector=" 0.047, 0.08, -0.17"/>
          <pointer name="eye_center" vector="    0, 0.08, -0.17"/>
        </tracker>
      </trackerSystem>  
      

        <!-- Static points can also be defined, such as the corners of a screen -->
            
        <!-- Screens are defined by a set of four points and a reference name. -->
        
      <viewport name="rumble_screen0">
        <pointer name="ul" vector="1.2250, 1.1076, 1.2293"/>
        <pointer name="ur" vector="1.5765, 1.2521, 1.2369"/>
        <pointer name="bl" vector="1.2344, 1.1050, 0.9278"/>
        <pointer name="br" vector="1.5791, 1.2588, 0.9342"/>
      </viewport>
      
    </vrmanager>