View this PageEdit this PageAttachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide

Immersadesk HOWTO

by Yu Cheung "toby" Ho

The Immersadesk is a large virtual reality
display unit produced by Fakespace Systems with a cpu on board to handle
its stereo video capabilities. The one we have in the systems lab room
201 is the  ImmersaDesk
. This howto will describe the basic operations of the Immersadesk
and how to use its virtual reality facilities. A sample application written
by me will be provided, in addition to the pointers to many more sample



In order to experience the stereo effect, the user of the Immersadesk must
wear the goggles provided. These goggles along with the "wand" or the joystick
are usually kept in the drawer attached to the desk. When stereo display
is rendered on the desk, the effective images for the left and right eyes
swap back and forth constantly while the left and right polarized eye pieces
of the goggle shut and open at the same frequency as the swap so that the
left eye piece lets in only the left eye frames and the right eye piece
lets in only the right eye frames. In addition, the Immersadesk has a tracker
of built in which allows the programs using the desk to know the positions
of the user's head (from the sensor attached to the goggle) and the positions
of the user's wand. The wand is a controller with a joystick and three
buttons. It is ususally used by programs to navigate through the virtual
reality worlds and manipulate the various objects in them.

Our Immersadesk is connected to the display of, a 16 processor
Silicon Graphics machine. To turn on the device, find the Immersadesk's
remote control and push the "stby" or standby button. Do this again to
put the desk back on standby mode. Do not push the power button, it may
cause the desk to be incorrectly calibrated.

Once the desk is on, it should show the current display of nighthawk.
The keyboard and mouse of the nighthawk are connected to the Crestron,
which is a black shelf-like system on the corner of the systems lab, it
is an elaberate system used to route inputs and outputs of other systems.
If you do not yet have access to nighthawk you will need to talk to Matt

In order to ultilize stereo video on the Immersadesk, the display resolution
must be set to 640x800 or lower, and nighthawk must be told that stereo
is on. If this is not the case, the virtual reality programs will not work
and you will need to talk to Matt Wolf to change the display settings.

Once you are logged on to nighthawk, you can try out some demos. The
demos are located in the directory /usr/local/CAVE/demos, the executables
of are named run_<demo> where <demo> is the name of the particular
demo. There is a diagnostic program cavevars under the /usr/local/CAVE/bin
directory. When ran, it shows the values supplied by the tracker. To ensure
the tracker is working properly, move around the tracked goggles and the
wand and see that the corresponding values are changing. If the tracker
is not working properly, that usually means the tracker daemon which listens
to the tracker on the Immersadesk needs to be restarted. This is done by
executing the restarttrackd program under the same directory as cavevars.
Restarting the tracker daemon requires special previlages on nighthawk.
The crashing of the track daemon usually cause the CAVElib programs to
be unable to run.



CAVElib is a library for Virtual Reality programming. It is a layer
on top of a standard graphics library – in our case openGL – that handles
stereo output, interfacing the tracker daemon, networking issues dealing
with remote input and display devices, and some others. For a programmer
with experience using openGL, it is fairly simple to use CAVElib to write
a VR program. The most complete resource for programming in CAVElib is
its User's Manual . There
you can find instructions on how to compile your first program, how to
configure the software and hardware, and reference to all of the function
calls provided by the library.

The general form of a CAVElib program is:


         #include <cave.h>

         void app_shared_init();

         void app_compute_init();

         void app_init_gl();

         void app_draw();

         void app_compute();

        main(int argc,char Error: this should not happenargv)








while (!getbutton(ESCKEY))






CAVEConfigure reads a configuration file which contains information
about the Immersadesk, and which tracker sensors are available.

app_shared_init is a the place where the programmer should initialize
any shared data between the main loop and the rendering process.


To get you started, here are some  sample programs. If you are more motivated, you could also look at the source
code for the demos distributed with CAVElib.  here CAVE_fractal_mountain.tar.gz
is the demo program I wrote, it displays and allows the user to navigate
through a recursively generated fractal mountain and was originally a project
for a graphics class.


Some Useful Functions

Here are some of the useful functions provided, a complete list of them
can be found here.




Much of the trouble i ran into with CAVElib were due to the differences
between the glut library and the CAVElib. Here are some tips that I think
might be useful:


Fakespace Systems

CAVElib Users Manual

Link to this Page