Welcome to the home page for the FreeVR Free VR library; Free and Open. The library continues to progress, but it stable enough such that at least one operational virtual reality facility relies solely on FreeVR.
Documentation on the current status of the library on various platforms, and interfaces to various I/O devices is included directly on this page. Much of the features of programming FreeVR can be seen in the tutorials. There is also a specific webpage with a listing of most of the functions that the application developer will need to use, plus a webpage on the ability to interface with a running VR application.
FreeVR is an open-source virtual reality interface/integration library. It has been designed to work with a wide variety of input and output hardware, with many device interfaces already implemented. One of the design goals was for FreeVR applications to be easily run in existing virtual reality facitilies, as well as newly established VR systems. The other major design goal is to make it easier for VR applications to be shared among active VR research sites using different hardware from each other.
FreeVR is not associated with any public or private institution, including present and past employers of any of the contributors.
FreeVR was written from the ground up. This was done both for legal reasons, and because we did not want to be constrained by the way any particular existing VR library was designed. However, the API may seem reminiscent to some VR programmers.
FreeVR is not a VR content library. It does not provide a scenegraph layer, or other features often associated with such libraries like intersection testing and collision detection. It does not provide a physical simulation for objects in the virtual world. FreeVR is intended to work with many scenegraph and other libraries. While SGI's Performer library was the primary alternative for many years, it is no longer a primary focus (though if you have a machine with Performer, it will still work). More recently, the OpenSceneGraph (OSG) library has been used with several FreeVR applications, including some that make use of the Delta3D system. FreeVR has also been used with the OpenSG library, though no recent testing has been done. Also, some experimentation with the OpenDynamicsEngine has also been done, with some preliminary new tutorials under development, and with more work to do.
The documentation for FreeVR has been broken down into different areas depending on the particular task at hand. For the administrator of a VR facility, the administrators guide focuses primarily on how to configure FreeVR to run with their displays. For the programmer, there is the overall programming paradigm description, plus separate function reference and tutorial pages. If the programmer desires to go beyond application programming and make modifications to the FreeVR library itself, there is a library development guide. And for the end user is a user's guide, plus a separate document on connecting to a running application to view and even modify parameters.
A recent version of FreeVR has been tested on these operating systems:
These operating systems worked with older versions of FreeVR, but have not been tested lately:
Currently, C is the only language for which a fully developed API exists. Of course, C++ will also work, but no extra features have been added to complement it. However, many C++ applications have been written using the FreeVR library, including many student programming assignements, and interfaces to other libraries with only C++ APIs, such as OSG and ODE.
Note however that examples for OpenSceneGraph and OpenSG are not yet included with the distribution.An interface to Inventor has worked in the past, and work continues. At this point, the focus is on the Coin3D implementation of the Inventor API. One day we hope to interface to other interesting graphics systems such as SCIrun, the Simian volume renderer, and Tachyon (John Stone's real-time raytracer). Others are also in the back of our minds.
Part of the reasoning for making FreeVR an open-source effort is to allow easy access to anyone interested in using the library who might have unusual I/O devices. (Of course, that's not the only reason or we would have simply provided a DSO interface.)
However, we knew that there had to be a minimal set of devices already implemented in order to get the ball rolling. And these devices also serve to provide sample source code for a variety of devices (not to mention we needed something for testing our applications):
For some other devices (including some under development), the VRUI VRDeviceDaemon and the UNC VRPN library can be used to pass input information to FreeVR.
Download the current version of FreeVR: freevr_0.6b.tar.gz.
Older Versions:
You can also download Bill Sherman's FreeVR programming examples for OpenGL, or for Performer. These examples are technically not open source, but shared to help get new FreeVR programmers up and immersing themselves.
In addition to the example applications above, there have been some interesting CAVE applications that have been ported to work with FreeVR. The most interesting of these (which also happens to be open-source) is the AfterShock QuakeIII world loader application ported to VR by Paul Rajlich. The CQ3A Application can be downloaded from Paul's visbox.com webpage. For best results with FreeVR, you will need a version later than 0.8.7.
Other fun and useful applications will be listed here as they become available.
Version 0.6b has some new input device features, plus the usual bug fixes as necessary. New input devices include the AR-Tracking dtrack protocol, and the Polhemus Patriot Wireless. The ARTracking works very well, however the Patriot Wireless has some issues with its protocol (not sure why Polhemus didn't stick with their existing Fastrak protocol), so more work is required there. One new "output" device was also added -- the Vrui VRDeviceDaemon protocol can now be emitted by the FreeVR library, so now FreeVR can act as a Daemon to Vrui applications. There are some new stereo rendering modes that are under development, but the implmentations are not yet complete, so they will be part of the forthcoming release.
Version 0.6a was created to indicate a break where support for clustering would be added to FreeVR. Unfortunately, that support has not yet been culminated. Some effort was put forth, but the task was not completed by those to whom it was assigned, so it has become incumbent on the primary author to pick up the ball.
In the meantime, there is at least one fancy new feature, and that is the ability to allow a portion of the virtual world to be rendered from viewpoints separate from the primary view — typically the head of a second user.
Also, a new new "device" can now be handled — the VRUI VRDeviceDaemon. This then also allows any device handled by the VRUI daemon to now be read by any FreeVR application.
The last major update however was to the FreeVR tutorials. A handful of new tutorials have been added, many toward the beginning of the steps through FreeVR, so most of the tutorial programs have been renumbered.
And there are the usual bug fixes here and there.
Of course, FreeVR version 0.5g fixes a few bugs over previous releases, but there are many other feature additions that make this release noteworthy. Among these features is the ability to work with the OpenSceneGraph graphics rendering library. We have also done some testing with the OpenSG rendering library. There are also some new function calls for "self-documenting" the user interface to the application. And there is now a Tcl/Tk based program "fvri.tcl" to provide users with a GUI interface to the running VR program. The documentation has also been improved in a few areas, particularly on how to view and interpret the running statistics information that is collected.
The webpage was also improved a little to allow for better navigation through the site. Hopefully the post-alpha version of this release will include a small gallary of sample applications.
Enjoy!