FreeVR: Virtual Reality Integration Library
FreeVR
Tutorials
User Guide
Programming
Functions

FreeVR

TUTORIALS

DOWNLOADS

GUIDES
    Administrator
    User
    Programming
    Function List
    Library Dev
    Socket Interface

MAN PAGES


All materials
Copyright © 2024
William R. Sherman

Manpage of FREEVR

FREEVR

Section: FreeVR Overview (7fv)
Updated: 29 March 2022
Index Return to Manpage Contents

 

NAME

FreeVR — A virtual reality (VR) integration library and toolkit overview.  

DESCRIPTION

FreeVR is an open-source application programming interface (API) for interfacing with virtual reality (VR) input/output hardware. It also includes a suite of utilities for testing input devices and for analyzing serial and network protocols. FreeVR applications are not written for any particular VR display, but conform to any individual system at run-time based on a flexible configuration specification.

The FreeVR library then handles all operations involving perspective rendering, graphics setup, multi-processing, as well as input devices, producing an experience that puts the user in the middle of a virtual world — an immersive experience. FreeVR immersive experiences include artistic worlds, fun worlds as well as data visualization worlds. The type and style of virtual world can be whatever the application developer can produce.

There are choices in what graphics rendering libraries applications can be written for, and a wide variety of input devices that can be configured as interfaces.  

Rendering Library Options

The primary low-level graphical interface that FreeVR uses is OpenGL. Applications can be written directly using the OpenGL API, or instead, using one of a handful of higher-level graphics libraries.

Over time FreeVR has been interfaced with a handful of these higher-level graphics APIs. Of these OpenSceneGraph and ANARI have been most currently tested. (The ANARI effort still requires more work. Also, the Delta3D, and Iris Performer libraries are deprecated, and the OpenSG seems like it might be as well.)

Graphics
Library

OpenGL
OpenSceneGraph
ANARI
Inventor/Coin3D
--- — --- — --- — ---
OpenSG
Delta3D
Iris Performer
 

Input Options

There are a plethora of options for interfacing with input technologies that measure user movements through space, in addition to other discrete and continuous user input interactions. Position trackers — devices that track location and orientation of a user, or at least particular elements of a user like the head and one hand — are of course a key element of producing the physically immersive interface that defines virtual reality, and thus FreeVR can interface with most of these devices. Not all position tracker devices are specifically designed for VR, but even those (others) that are not are often appropriated for immersive tracking. Typically these "other" systems are motion capture (MoCap) systems.

In some cases, a VR facility may already be using a software system that reads and streams input data through a network protocol. FreeVR can also read the most common VR daemon protocols. Finally, FreeVR can directly interface with most button and valuator inputs including standard game-controllers, plus many pre-cursor computer interface technologies. Of course, FreeVR can indirectly interface with even more devices through the network protocol systems such as VRPN and the Vrui VRDeviceDaemon.

Here are examples from each of these categories:

PositionNetworkO/SSpecialty
TrackerProtocolInterfacesDevices

ART Camera TrackersVRPNX-WindowsCyberGlove
InterSense IS-900VRUI VRDDLinux joydevPinchGlove
NaturalPoint OptiTrackVisBox DaemonLinux evdevSpaceMouse
Ascension Flock of BirdsANL TrackDStatic SpaceBall
Polhemus Fastrak  SpaceOrb

Many of the modern game controllers and similar devices are handled by the Linux joydev and evdev (aka evio) interfaces. And devices such as the Nintendo "wiimote" can be handled either using the VRPN daemon or as an X11 device using the Cwiid daemon. Plus there are more device interfaces under development — and even some that are not listed because they are no longer relevant.  

Operating System Options

The one area where FreeVR options are a little more limited is in the area of Operating Systems (OSes). For the most part FreeVR is targeted at Unix and Unix-like OSes, in particular Linux, the BSD-based OS/X Darwin system, but also will run under MS-Windows under the Cygwin system.  

Distinctive Features

FreeVR has a number of features that are unique, or more fully implemented than other VR interface systems, of particular note are:
Flexible and powerful configuration system
To allow FreeVR to work in a variety of systems with a wide selection of input devices, and with different ways to configure rendering outputs and how processes are assigned between each task, a very flexible, and yet well defined configuration parsing system has been developed. In particular, the FreeVR configuration system offers conditional expressions, variables and mathematical operations. See freevrrc(5FV) for details.
On-screen information displays
FreeVR offers a handful of data overlays that can inform the user of how an application works or how well the system is functioning. For the application user, there is a help-screen overlay which can inform them of how the button and valuator inputs affect the operation of the application. The FreeVR API provides functions that enable the application programmer to specify how each input behaves. Also, there is a statistics overlay that displays the performance of the application in a time-streaming view which is broken down by process, and then sub-divided by activities within the process. This can be very beneficial to the developer looking to improve the realtime nature of their application. Framerate, The most basic statistic, can be independently displayed. The third on-screen display is a live input events overlay, as inputs occur. This can be useful both for troubleshooting a VR system, or when creating an application tutorial to demonstrate to the viewer what inputs are being processed by the application.
Input stream repeater
FreeVR has the ability to repeat inputs as they are received — much in the same way a telegraph repeater outputs a message exactly as it was received, FreeVR can output all the inputs it received, packaged as one of the standard VR data stream protocols: the VRPN protocol, ANL's original Tracker Daemon, the Vrui VRDeviceDaemon, a CSV (comma-separated value) stream, or the remote control interface of the Monado OpenXR runtime. This can be extremely useful both for troubleshooting a VR facility, but also by enabling a VR facility to rely on a single protocol for multiple applications and systems, and use FreeVR as a go-between when there might not otherwise be a direct link from a particular type of input system: for example, reading Valve/HTC Vive Lighthouse tracking with the VruiDD system to feed the Monado OpenXR runtime.
Output Stream
Protocol

VRPN
VruiDD
Monado OpenXR remote
ANL TrackD
CSV

Another benefit of the output capability of FreeVR is that these can be used to record, and later play-back the inputs that were sent to a VR application. In theory, this play-back can be used to post-analyze what happened during a VR interactive session. Or the movement data can be independently analyzed. How to accomplish recording and play-back is covered in the FreeVR User's Guide.

Live network interaction
FreeVR has a network interface that allows users to connect to a running VR application through a socket interface. The connection can be as simple as using telnet to connect to the FreeVR port (port 3000 by default). Commands include the ability to control stereoscopic rendering, affecting inputs and adjusting the coordinates of screens and input devices. A GUI interface can also be used to interact and even provide live updates of the state of the system — and one such application is even provided: fvri.tcl (ie. the FreeVR Remote Interface).
VR tool suite
In addition to the core library, the FreeVR package includes several other tools and utilities that can be especially helpful when establishing and trouble-shooting a VR facility. In particular each FreeVR input type has an associated "test" application that can be used to verify a working connection with the inputs (both for input devices and input daemons). There are also test programs for specific areas of FreeVR operation. In addition there are two tools designed to evaluate serial and socket protocols: serialspy and socketspy respectively. Each tool has its own manpage.

Under development are a pair of tools to assist with creating a calibrated configuration file for easier creation of optimal configuration parameter settings.

Thorough documentation
While most virtual reality software systems provide some type of documentation, what makes FreeVR somewhat more distinctive is the availability of several ways to learn how to make use of the API. This includes documentation on the web (www.freevr.org), which has a user's guide, a guide for configuring the system and other administrative instructions, plus a fairly extensive tutorial on how to develop FreeVR applications. Finally, there are now several manpages available, and new ones under development.
 

What FreeVR is Not

FreeVR has many features and capabilities, but it is built within certain design constraints intended to keep it lean and mean. With that in mind, FreeVR is designed to be a VR library and tools for configuring and troubleshooting a VR setup, and that's it. What that means is that FreeVR is not:
A Scenegraph Library
Beyond providing the perspective matrix on the stack, the ability to control a distinct matrix for each user's position in the virtual world, and some functions for billboarding, all the rendering is done by the application. Of course FreeVR has been interfaced with multiple existing scenegraph libraries, and thus by not associating FreeVR with it's own scenegraph, there are more options available for the developer.
Physics/Game Engine
As with scenegraphs, FreeVR is also not a game engine or a system that includes any aspects of world physics, including intersection testing or collision detection. Also as with scenegraphs, this allows the application developer to work with a physics/game system with which they are already familiar — assuming that system will integrate well with FreeVR. For example FreeVR has been interfaced with the OpenDynamicsEngine (ODE) physics engine as well as the Delta3D game engine.
Widget system
FreeVR also does not include a built-in widget system. This is perhaps more of a hindrance than the other exclusions. Likely because there is no general-purpose 3D widget system that is available, so each application must develop it's own interface.
 

Documentation and Tutorials

As mentioned above, one of the strengths of FreeVR is the documentation that is available. Specific documents included with the library (and also available on the web page) are:
User's Guide
Application Development Guide
Function Reference Manual
Administrator's Guide
Library Development Guide

These are now being augmented with a collection of man pages. There is still a ways to go before the man page collection is complete, but the pages for many of the command-line utilities have been written.

Especially useful are the suite of tutorials. The primary tutorial provides a series of step-by-step examples that build up to sample applications with widgets, travel, and graspable objects. Two new series of tutorials provide examples for how to interface FreeVR to the OpenDynamicsEngine (ODE) physics engine and the OpenSceneGraph (OSG) scenegraph library.

All of this is collected on the freevr.org webpage.  

COMPILING

FreeVR has a fairly simple build process. The library is simple enough that it doesn't require complicated build systems like autoconf or CMake. The basic process is this:

% make <architecture>

By default, when providing no value for <architecture>, make will simply return a short list of possibilities (same as the "list" target). On modern Linux, the standard target is "linux2.6-glx-64", and indeed there are two synonym targets for that system: "linux", or even "default" will compile that version. Four other shortcut options are "make pt" to compile the pthreads variant, make st to compile the single-thread variant, make macos to compile the darwin-X-glx" version, and "make cygwin" to compile a Cygwin version on MS-windows. For other options, you can get a list of what <architectures> are available with the "make list" command:

% make list
 Choose an architecture/configuration: (type "make fulllist" for more options)
------------------------------------------------------
bsd-glx           Free/Net/OpenBSD     OpenGL and GLX 
cygwin-glx        Win32 w/ Cygwin      OpenGL and GLX 
darwin-X-glx      Darwin XFree (Mac)   OpenGL and GLX 
linux2.6-glx-32   Linux 2.6 (32b arch) OpenGL and GLX 
linux2.6pt-glx-32 Linux 2.6 (32b arch) OpenGL and GLX with pthreads for Multi-proc 
linux2.6-glx-64   Linux 2.6 (64b arch) OpenGL and GLX 
linux2.6pt-glx-64 Linux 2.6 (64b arch) OpenGL and GLX with pthreads for Multi-proc 
linux2.6st-glx-64 Linux 2.6 (64b arch) OpenGL and GLX with single threading
------------------------------------------------------
Type 'make <arch>' to build for an architecture listed above.

So, for Linux users on a 64-bit system:

% make linux2.6-glx-64
or
% make linux

You'll notice that in addition to choosing an OS, and the memory addressing range (32 or 64 bit), for Linux there are also the "pt" and "st" options. When the "pt" option is specified, it determines whether the sharing of data between processes is done using pthreads, versus using standard shared memory methods. Typically one would use the normal method, but when using FreeVR with systems that handle their own memory allocation, such as OpenSceneGraph (OSG), pthreads are required. The "st" option indicates that the library should be compiled for single-threaded operation, which uses no process spawning, nor shared memory. The single-thread variant is typically used for debugging purposes.

If you use what might be considered a more obscure operating system, and you see that the above list is rather short, you can use the fulllist target for make and you will get a much more complete list of the possible systems for which FreeVR can be compiled. Note however, that FreeVR is infrequently tested on less common systems, so you should report back to the authors the degree to which everything worked under your OS of choice.

ASIDE: Linux changes have been sufficiently stable as far as FreeVR's needs are concerned that any version of Linux from 2.6 on will work as the target OS for FreeVR. Thus Linux 3.0 kernels as well as Linux 4.x kernels are fully compatible.  

Dependencies

As stated above, FreeVR was designed with as minimal dependence on other software as possible. Really, just the windowing system (presently just X-11), and OpenGL. On Linux there may be some extra packages required for some input device systems.

In general you need to make sure these packages are installed:

OpenGL
libXi
joydev (Linux only)
evdev (Linux only)
 

RUNNING APPLICATIONS

If your system administrator has a properly configured "freevrrc" file then you are in luck and can immediately begin using an application immersively.

If not (and/or you are the system administrator responsible for creating the configuration file), then you have two options:

  1. Run your application in "simulator" mode, which is often a good first step when testing out an application as it is being developed, or
  2. Learn how to configure your immersive system to work with FreeVR. Of course, describing details on the configuration process is too much for this particular man page — please see the FreeVR Admin Guide for specific details.
 

Self-documenting Applications

One of the on-screen information displays mentioned above is the ability to display some basic instructions on one of the screens to help a user figure out how to operate the application. This is primarily used to indicate how button presses and valuator inputs will affect the application.

Press the "9/PgUp" key on the numeric keypad to toggle the on-screen help. Note that whichever window has focus is the one on which the display will be toggled.  

Simulator Controls

When operating a FreeVR application in a simulator window, it is generally desirable to generate inputs to the application, and sometimes you will also want to adjust how the simulator renders the world. In fact, inputs and outputs are handled separately. Inputs affect the actual application as though the input had come from an actual position tracker or button or whatever input might be controlled by an immersed user. Whereas the window controls affect only the window with focus when they are activated, and the application will have no knowledge of the change.
Simulated inputs
FreeVR simulated inputs have distinct input controls based on the style of input — usually buttons, valuators or position trackers. When we speak of "simulated" inputs, we generally mean one type of physical input substituting for a different input when immersed, so frequently mouse buttons and key presses acting as wand/controller button presses in the VR system, or mouse movements mimicking a joystick. However, for devices such as game controllers, the same device might be used both in the immersive system or when simulating an immersive display.

For position trackers, however, it is far more common that there is some type of simulated interface. In FreeVR the first position tracker is considered the "head" tracker, so is represented as a blocky head. The second tracker is usually the wand, so is represented as an elongated pyramid. Usually, all other trackers are represented as small boxes. (During some tests, the inputs(1fv) program will augment the simulator to show two position trackers as pyramids to mimic an HTC Vive setup.) All the position trackers can be moved around using a combination of key presses and mouse inputs, or possibly joysticks on a game controller.

By default, the simulator configuration of FreeVR uses the three mouse buttons as the first three buttons of input. The joystick is emulated by moving the mouse while holding down the "space bar". Moving around the trackers can be done in multiple ways. In general, the arrow keys can be used to move the "active" simulated tracker (aka "6-sensor") in the X-Z plane (or X-Y plane when the left-shift modifier key is held down). Rotations are with the "right home keys" movements that are familiar to users of the vi/vim editing program (and other programs that have mimicked it's movement) — 'h', 'j', 'k', and 'l'.

This table summarizes the default input controls:

  Button Input
Esc — button 0 (terminate button)
left mouse — application button 1
middle mouse — application button 2
right mouse — application button 3

  Joystick Input
space — map mouse location to joystick (center = 0,0)

  Sensor Translation
up arrow — move sensor forward in Z
down arrow — move sensor backward in Z
left arrow — move sensor left in X
right arrow — move sensor right in X
f — move sensor up in Y
v — move sensor down in Y
q — move the sensor in the X-Y plane with the mouse
a — move the sensor in the X-Z plane with the mouse
left-shift — swap the Y and Z movement controls
1 — toggle between absolute and relative movement
2 — toggle the space restriction on movement

  Sensor Rotation
h — rotate left about the Y axis (azimuth)
j — rotate down about the X axis (elevation)
k — rotate up about the X axis (elevation)
l — rotate right about the Y axis (azimuth)
, — rotate counterclockwise about the Z axis (roll)
. — rotate clockwise about the Z axis (roll)
left-alt — map the four arrow keys to azimuth and elevation rotations

  Sensor Selection
n — select the next sensor
s — select the head (skull) sensor
w — select the wand sensor (the first one)

  Sensor Reset
r — reset sensor's location and orientation
8 — reset all sensors' location and orientation

Altering a simulated view
One option for viewing the virtual world is through a simulated view. A simulated view includes markers that indicate the position of the tracked 6dof sensors moving in the virtual space. By default, the virtual space is marked with translucent surfaces that represent a CAVE-like display of 10 feet cubed. Actual screens from the configuration file may also be represented as rose-colored outlines, if so-configured.

By default, keys on the numeric keypad can be used to alter the view into the virtual world, including options to toggle the simulated objects and the virtual world itself.

This table shows the default view controls:

Num/*-
LockshowFPSzoom
windowosdin

7/Home89/PgUp+
jumprotatestatszoom
homedownosdout




456
rotateresetrotate
rightviewleft

1/End23/PgDnEnter
worldrotateinputset

 objects
uposdhome




0/Ins./Del
simulatorhelp

 objects
osd

The highlighted labels indicate controls that are available on all screens, not just simulated views — and thus they can be displayed on a side wall in a CAVE for example. Also, the "show window" flag can be activated on any window, but the results are only visible in a simulated view.

NOTE: these were slightly rearranged for FreeVR version 0.6f.

There are currently three other function keys that can be used to affect the behavior of a running application. These are mostly used for debugging, but are included here for completeness:

F10F11F12
reinitcontinualone jump to
gfxuser's viewuser's view

To reinitialize the graphics is to call the startup callback for rendering the world — typically the application will not expect this, but might be helpful in debugging. The F11 and F12 both cause the simulator view to jump to a location where the simulated user's head would be viewing. In the case of F11 this will continue until toggled off again, whereas for F12 it will only happen once per keypress.

NOTE: these and additional details are covered in the online User Guide:
http://freevr.org/user_guide.html
 

Interface to Applications

One of the other unique features of FreeVR is the ability to query and change parameters of a running system through a socket interface. When the FreeVR configuration specifies the inclusion of a "telnet" process, then the telnet tool, or indeed any tool capable of communicating via sockets (such as ncat can send commands to any running FreeVR application. As mentioned above, the FreeVR distribution includes an example GUI tool that can be used to interface with application over a socket — fvri.tcl (ie. the FreeVR Remote Interface).

One use of the socket interface is for debugging FreeVR applications and indeed the FreeVR library itself. However, it can also be used to shift between monoscopic and stereo rendering, or to send input events to an application — perhaps even the input that causes the application to terminate.

To add a "telnet process" to the currently selected system of a FreeVR configuration, add these two lines at the end of the configuration process:

if (numberprocsoftype("$system, telnet") == 0)
system $system += { procs += "default-telnet"; }

NOTE: the conditional is to ensure that when the configuration already has a telnet process, this will not add an additional one to the system.  

CONFIGURATION

As a complex system with many options to configure, the FreeVR configuration system must be robust yet flexible to allow for the myriad ways in which a virtual reality system is put together. Learning how to configure an elaborate system takes effort, and perhaps some experimentation, but the FreeVR distribution includes several sources of information and assistance.  

Configuration Order of Precedence

The first thing to know is the hierarchy of configuration sources. There is an order in which configuration data is read and processed. This order of precedence allows the system to be organized to enable adjustments to be made for individual users, for specific applications, or for specific one-time needs.

The order of configuration parsing (with later sources overriding earlier sources on the list) is:

1)
Built-in default configuration
2)
$FREEVR_HOME/.freevrrc
3)
$HOME/.freevrrc
4)
$FREEVR — i.e. the string contained in the environment variable
5)
command-line arguments — if the application passes them to FreeVR
6)
hard-coded arguments — the application itself can force some options (not recommended)

NOTE: any of these configuration inputs may themselves cause another configuration file to be read through the use of the "readconfig" command.

 

Sources of Configuration Information

Details of configuration can be more comprehensively documented in manuals where a lengthy description can be presented — rather than in an overview manpage. FreeVR has a handful of sources one can turn to for details on how to configure a virtual reality facility for use with the FreeVR system.
The VR Administrator's Guide
The FreeVR Administrator's Guide is an HTML document that describes the FreeVR configuration system, with details about each of the objects that are linked together to assemble a complete system (e.g. windows, input devices, processes), as well as the overall syntax.

  - http://www.freevr.org/vradmin_guide.html

Explicit Backus-Naur specification
The FreeVR configuration is a fully specified grammar described
in Extended Backus-Naur form. This description can be found in the file:

  - freevr.bnf

Sample pre-written configurations
The FreeVR distribution comes with a handful of example configuration files. These files can all be found in the "etc" directory. Example files name in the form "rc_sample_<name>", where "<name>" might be "cave", "6dof, or "joydev". Plus one named "ks, which is the "kitchen-sink" of sample files. The kitchen-sink includes all sorts of examples and tests used to verify the operation of the configuration parsing, and as such does not always exemplify the best way of creating a configuration, but does offer the ability to see what can be done. The other named examples are trimmed to show how to accomplish specific systems.
Configuration modification via socket commands
The FreeVR telnet/socket live network interaction feature can be used to interact with the configuration as well. The simplest interaction is simply to output the current configuration, which can be done in human or machine readable form:
  FreeVR> print config

This will output details of the running system that go beyond the minimal needs of specifying the configuration, but it can often be used to glean information about the system.

Other options include the ability to tweak the existing configuration when it appears to be nearly correct but just needs some slight adjustments. Currently, these commands are available:

   FreeVR> set window[0] nudgex <distance>

FreeVR> set window[0] nudgey <distance>
FreeVR> set window[0] nudgez <distance>
FreeVR> set inputdevice[0] nudget2rwA <x-rot> <y-rot> <z-rot>
FreeVR> set inputdevice[0] nudget2rwT <x> <y> <z>
FreeVR> set input <6-sensor name> nudger2eA <x-rot> <y-rot> <z-rot>
FreeVR> set input <6-sensor name> nudger2eT <x> <y> <z>

Configuration conversion software
Finally, there is a legacy application that was designed to assist administrators operating an original CAVE™ system to convert thier CAVE configuration files into a FreeVR file:
  % bin/cave2fvr <cave configuration file>

As the CAVE configuration files were generally simple and involved one-line descriptions of certain aspects of the facility, one could track down the documentation on how to use the legacy system and then convert it to FreeVR style. Of course, probably better to just learn how to create your own configuration.

 

Testing the system hardware

As part of setting up a new system, it is good practice to verify the operation of each of the components. To this end, the FreeVR distribution includes a suite of test programs to check the operation of many components of the system.

The most useful test programs are those that interface with input devices and daemons. To determine the current list of programs, compiled them with the "devtests" target:

% make devtests

The applications compiled are each designed to interface with a particular system, each with their own connection options. Fortunately, there is a manpage for each device, so look for the "man1 manpages — they will also be listed in the section "1fv" intro manpage.

Under development, and included in the this version of FreeVR (0.7), is a new "configurator" application that is being created to enable VR administrators to more easily create a new configuration. However, it is still under development, so is only partially operational at this time.  

BUILDING APPLICATIONS

Details of application building is well beyond the scope of an overview manpage. However, there are some good resources that can be pointed to:

Sample applications in the FreeVR distribution
The FreeVR distribution includes two sample applications:
  • travel — the "travel" application is a mostly constant world filled with colorful boxes and pyramids. A single white-pyramid has been placed in the virtual world, and thus allows the user to travel relative to that one object using the joystick. All the other objects are placed in the real-world (and therefore don't actually travel), but are positioned in strategically interesting locations for testing inside a CAVE or other virtual reality display.
  • inputs — the "inputs" application, as mentioned elsewhere, simply gives a live presentation of all the inputs received by the configured virtual reality system. This alone has great value, but "inputs" also serves well as an input server/repeater.
Extensive API reference manual
The FreeVR webpage includes an extensive API reference manual, know as the "Function Reference":
  - http://www.freevr.org/functions.html


This page has all (or at least all the important) application programmer functions in a categorized list with links to each specific function. Until there are manpages for each function, this is the definitive reference for programming FreeVR. All the HTML documentation is included in the FreeVR distribution.

OpenGL or Graphics system references
Writing a FreeVR application will require sufficient knowledge of OpenGL, or at least a good high-level scenegraph such as the OpenSceneGraph library, that it will be beneficial to be versed in the usage of the graphical API of choice.

BTW, for referring to coordinate systems, FreeVR uses the native coordinate system of OpenGL, which is Y-up. For the Performer scenegraph this was converted to Z-up, as that is the usage of the Performer library. However, OpenSceneGraph does not operate from a specially modified version of FreeVR, so it too operates in a Y-up coordinate system.

Extensive tutorials
There are extensive tutorials for writing FreeVR applications using the OpenGL API. There are also a series of tutorials that were developed for the Performer API, but these are slowly being ported to OpenSceneGraph. There are also tutorials under development for the OpenDynamicsEngine (ODE) physics engine.

The FreeVR webpage includes most of these tutorials as downloadable archives:
  - http://freevr.org/tutorials.html

Real applications
There are a handful of FreeVR applications available for download
on the web. Two of the most notable are:
  • VMD — the "VMD" (Visualization of Molecular Dynamics) application is, as the name implies, a tool for rendering molecules. It is especially good at rendering massive molecules, and rendering them dynamically. It has a FreeVR interface that allows one to view molecules dynamically, with all the powerful options of VMD available on the command line, or through mapped button inputs.
  • CQ3A — the "CQ3A" (CAVE Quake III Arena) application uses the Aftershock Quake-III world rendering engine to display those worlds life-size with the ability to walk and fly through them. It does not include game play, so it works mostly as a tool for traversing a game map, including maps created by the Quake community.
 

DEVICE SERVER

As mentioned in the section on the distinctive features of FreeVR, FreeVR, or more specifically indeed, any FreeVR application has the capacity to behave as a server for I/O devices. Naturally, as a virtual reality library, FreeVR can interface with a myriad number of I/O devices, but by including the ability to also be a producer of I/O data streams, a configuration can be created that reads inputs from any number of devices and then streams the data out using one of the available protocols. Presently, those protocols are the VRPN vrpn_server, the Vrui VRDeviceDaemon (for Vrui versions 1.x, 2.x or 3.x), the shared memory interface of the ANL tracker daemon, also known as TrackD, and a stream server that can either output CSV (comma-separated values) or the Monado OpenXR runtime remote control protocol.

Of course, it makes little sense to use a complicated application when the purpose is the side effect of the configuration to act as an input repeater, so the FreeVR package includes the aforementioned
 application with a minimal virtual world that is intended to be used as an I/O server — inputs(1fv). The inputs program simply renders a scene that displays information about the current state of the inputs read by the system.  

ENVIRONMENT VARIABLES

When a FreeVR application is executed, there are a handful of environment variables whose values have an effect on how the initial configuration process will take place:

FREEVR_HOME
The root directory of the FreeVR installation, and used to read a system-wide configuration file:
  $FREEVR_HOME/.freevrrc

HOME
The user's home directory, which is used to look for a user-specific configuration file:
  $HOME/.freevrrc

Note, the user-specific configuration file is read after the system-wide configuration, and thus can override any of the configuration parameters in a user customizable way.

FREEVR
The FREEVR environment variable can be set to contain a configuration string, which is applied to the configuration settings after the user-specific file is read, and thus can override options the user normally prefers.

By using an environment variable, a user can have a settings that are specific to a particular command shell, and all application run from that shell will have these unique parameters. This can also be a way to provide certain command settings when applications are run from a menuing system — for controlling stereo rendering for example.

FREEVR_DEBUGLEVEL_NO
Set level of debugging output that a FreeVR application will generate. Setting this value happens last, and thus none of the other means of reading configuration commands will override this setting — hence the NO (No Override) tag.
FREEVR_DEBUGLEVEL_NO
Similar to FREEVR_DEBUGLEVEL_NO, this environment variable sets the level of debugging output that a FreeVR application will generate. However, unlike the NO (no override) variable this value is used to set a default debug level at the beginning of the configuration process, so any subsequent settings will take precedence.
FREEVR_DEBUGEXACT_NO
Set an extra, exact level of debugging output that a FreeVR application will additionally generate, in addition to all messages at or below the general debug-level. Setting this value happens last, and thus none of the other means of reading configuration commands will override this setting — hence the NO (No Override) tag.
FREEVR_DEBUGLEVEL_NO
Similar to FREEVR_DEBUGEXACT_NO, this environment variable sets the extra level of debugging output that a FreeVR application will generate. However, unlike the NO (no override) variable this value is used to set a default debug level at the beginning of the configuration process, so any subsequent settings will take precedence.
 

BUGS

On some systems when a FreeVR application crashes it may leave behind shared memory segments. Sometimes it may be necessary to clean these up to prevent a deprivation of system resources. To do this, a shell script has been created that will handle this automatically — ipcrms.

Occasionally, a FreeVR application may hang during startup. This is intermittent, which means trying to run it again right away should allow the application to run fine, and being intermittent, it has been a difficult bug to eradicate. (Likely there is a race condition during initialization.)  

TODO

As with any large application, there is a lengthy list of minor bugs to eradicate and new features to implement that have yet to be handled. FreeVR, of course, is no different.

Some of the major features that are just over the horizon include:

Improve the VRPN output service.
Improve the ANARI rendering interface.
Develop HMD lens correcting distortion routines.
Further develop the configuration assistance utilities.
Create a native MS-Windows version.
Create a cluster interface.
Write man pages for all the API functions.
 

SEE ALSO

inputs(1fv), travel(1fv), freevrrc(5FV), telnet(7fv), wiimote(7fv), intro(1fv), and intro(3fv).

Web sites of interest:

FreeVR http://www.freevr.org
OpenXR https://www.khronos.org/openxr
ANARI https://www.khronos.org/anari
VRPN https://github.com/vrpn/vrpn/wiki
VRUI https://web.cs.ucdavis.edu/~okreylos/ResDev/Vrui
Monado https://monado.dev
OpenSceneGraph https://www.openscenegraph.com
Coin3D https://www.coin3d.org
OpenSG https://web.archive.org/web/20170806213018/http://www.opensg.org
Delta3D http://web.archive.org/web/20160703023414/http://delta3d.org


Here is the preferred citation to use when citing FreeVR:

  • William R. Sherman, Daniel S. Coming, Simon Su, “FreeVR: Honoring the past, Looking to the future”, In IS&T/SPIE Electronic Imaging. International Society for Optics and Photonics (SPIE), 2013.
 

COPYRIGHT

Copyright 2024, Bill Sherman, All rights reserved.


 

Index

NAME
DESCRIPTION
Rendering Library Options
Input Options
Operating System Options
Distinctive Features
What FreeVR is Not
Documentation and Tutorials
COMPILING
Dependencies
RUNNING APPLICATIONS
Self-documenting Applications
Simulator Controls
Interface to Applications
CONFIGURATION
Configuration Order of Precedence
Sources of Configuration Information
Testing the system hardware
BUILDING APPLICATIONS
DEVICE SERVER
ENVIRONMENT VARIABLES
BUGS
TODO
SEE ALSO
COPYRIGHT

This document was created by man2html, using the manual pages.
Time: 21:57:57 GMT, March 04, 2024