Cave6u: A VRML Browser in the CAVE
Cave6u is a VRML browser written in Performer that runs in the CAVE. Loading
of the VRML worlds is asynchronous. The main world is first loaded in,
and then the various inlines and image files are retrieved from over the
web and appropriately added into the scene graph. In a 4-wall CAVE,
the user has access to a web browser and thus can switch between VRML and
Features: The current capabilities of this browser rivals those
of the numerous "3D" VRML 1.0 browsers available today, mainly 'cause of
the 3D environment :-)
Initialization files: The user has to specify atleast one world
in a .agenda file which resides in the same directory as cave6u. He can
also set preferences in a files named "Cave6u" located either in his home
directory or the current directory. A sample file is located here
Standalone browser that handles inlines, anchors, textures (gif, jpeg
and sgi images) and gzip compressed files.
Supports the Cameras switch node convention for specifying multiple
preferred viewpoints of a world. Can either jump to the next viewpoint
or smoothly follow a path to it.
Caches multiple worlds in memory and on disk. Uses a history mechanism.
The user can navigate among the worlds in either drive or trackball
Acts as a helper application to Netscape in the 4-Wall CAVE. Supports
Netscape as a browser for HTML documents.
Setting up: Since the browser (cave6u) and Netscape communicate
to decide who views which document, we'll have to muck around with the
.mailcap files. Assume that Netscape is displayed on the 4th wall viz.
wall1:1.0 and cave6u runs on zbox:0.0. Then, you'll have to go to Netscape:
Options: General Preferences and change the type x-world/x-vrml to be handled
by the application "your_path/cave6u -d zbox:0.0 -remote %s -URL
%u". Or you could add a line in your .mailcap file thusly:
x-world/x-vrml: your_path/cave6u -d zbox:0.0 -remote %s -URL
Similarly for cave6u, the Netscape command string MOZ_COMMAND will have
to be set to "specific_path/netscape"; the display Netscape is running
on, MOZ_DISPLAY should be set to "wall1:1.0".
Caveats: Cave6u needs imgcopy to convert gif and jpeg images
into sgi images. In addition, if you are retrieving gzipped files, make
sure that gunzip is available in your path. If you want to talk
to Netscape, make sure it is running on the specified display. You may
also need to allow access by using xhost +.
Getting around: The handling of the wand buttons seems not to be
intuitive. The middle button switches between various modes. In each mode
the left and right button do different things.
By pointing the wand at the fourth wall, the viewer can get control of
the cursor. He/She can then click on urls and wrls and navigate. If a vrml
file is clicked it is shown in the CAVE. By pointing the wand towards the
front wall, the viewer can return to the CAVE.
Pick Mode: Where you go back and forth different worlds. The left button
takes you to the previous world loaded. The right button retrieves a new
world if you are presently pointing at a WWWAnchor, else it takes you forward
in the history list. The "virtual" wand is a rod of some color which changes
to red when the browser is busy.
Camera Mode: Where you cycle through the various viewpoints provided
by the content creator. The left button takes you to the previous and the
right to the next. The icon is an xyz coordinate system.
Other Stuff: The browser is written using Performer 2.0 which has
bugs in pfBuffer. The workaround is to merge buffers often and cross your
fingers. You may core dump occasionally. If you are dumping core somewhere
in nb_clean(), it's not my fault. Else, please tell me to fix it. cave6u
however runs fine while using Performer 2.0.1 and IRs.
A side effect of using Performer is that you can view any files that has
a loader written for it. For example, this browser is also an AutoCAD DXF
viewer for the CAVE.
If you want to run the browser in standalone mode ( no talking to Netscape)
run with the command line arguments -nox.
Pictures of photos coming soon!
I'm currently writing a browser which is VRML 2 compliant, in the course
of which I am releasing a port of the vrmlscript parser to unix, which
you can obtain by clicking here. The actual
original untainted parser can be got from there