Immersive Visualization / IQ-Station Wiki

This site hosts information on virtual reality systems that are geared toward scientific visualization, and as such often toward VR on Linux-based systems. Thus, pages here cover various software (and sometimes hardware) technologies that enable virtual reality operation on Linux.

The original IQ-station effort was to create low-cost (for the time) VR systems making use of 3DTV displays to produce CAVE/Fishtank-style VR displays. That effort pre-dated the rise of the consumer HMD VR systems, however, the realm of midrange-cost large-fishtank systems is still important, and has transitioned from 3DTV-based systems to short-throw projectors.

Difference between revisions of "Vrui"

From IQ-Station Wiki
Jump to navigation Jump to search
(Synced this page with the internal AVL wiki page on Vrui (mostly scrapped what was here))
m (Now mention Vrui 3.0-002. Removed dead link to vruione.org)
 
(4 intermediate revisions by the same user not shown)
Line 12: Line 12:


==Vrui Versions==
==Vrui Versions==
There are currently two branches of Vrui (the 1.0 line and the 2.x line).
 
[[File:BC_IUPUI_6659m.jpg|thumb|right|250px|Vrui LidarViewer]]
 
There are currently three branches of Vrui (the 1.0 line, the 2.x line and the 3.x line).
There are some significant differences, including many changes to the API,
There are some significant differences, including many changes to the API,
as well as to the DeviceDaemon protocol.
as well as to the DeviceDaemon protocol.
If you have applications written for multiple lines of the Vrui library, then you will need to have each branch installed.  Fortunately, this is rather easy to do, and following these directions will ensure that your system will work with multiple versions of Vrui installed.
This page has most recently been updated for Vrui version 2.7-001,
but much of the configuration details are the same for version 3.0-002.
At the same time I have removed specific references to the Vrui 1.0 line,
but as this is a wiki, past versions are saved in perpetuity:
* [http://wiki.iq-station.com/index.php?title=Vrui&oldid=109 Vrui 1.0-068]


==Vrui Dependencies==
==Vrui Dependencies==
Line 32: Line 43:
==Installing Vrui==
==Installing Vrui==


These instructions have been tested with Vrui version 1.0-068 (the latest of the 1.0 line),
These instructions have been tested with Vrui version 2.7-001,
but should generally work for other versions of Vrui.
but should generally work for other versions of Vrui.


# Download Vrui
<OL>
#: Download from the [http://idav.ucdavis.edu/~okreylos/ResDev/Vrui/Download.html Vrui Download page]
<LI> Download Vrui
# Untar in a local directory
: Download from the [http://idav.ucdavis.edu/~okreylos/ResDev/Vrui/Download.html Vrui Download page]
#: <CODE>% tar -zxf Vrui-1.0-068.tar.gz</CODE>
<LI> Untar in a local directory
#: <CODE>% cd Vrui-1.0-068</CODE>
: <CODE>% tar -zxf Vrui-2.7-001.tar.gz</CODE>
# Adjust the makefile
: <CODE>% cd Vrui-2.7-001</CODE>
#: <CODE>% $EDITOR makefile</CODE>
<LI> Adjust the makefile
#:* set <CODE>INSTALLDIR</CODE> to "<CODE>/opt/VR/Vrui-1.0-068</CODE>"
: <CODE>% $EDITOR makefile</CODE>
#:*: NOTE: adding the build-version to INSTALLDIR helps avoid issues when upgrading
:* set <CODE>INSTALLDIR</CODE> to "<CODE>/opt/VR/Vrui-2.7-001</CODE>"
#:* add "-b" to the "<CODE>@install ... Share/Vrui.cfg ...</CODE>" line
:*: NOTE: adding the build-version to INSTALLDIR helps avoid issues when upgrading
#:*: (this will save you much grief in the future -- when you might otherwise wonder what happened to the config files you made)
<LI> Fix a bug ''(update tracking for single tracker)''
#:*: NOTE: after the first install, commenting out this line entirely is recommended
: <CODE>% $EDITOR VRDeviceDaemon/VRDeviceManager.cpp</CODE>
# Fix a bug ''(update tracking for single tracker)''
:* Change: "<CODE>if(trackerReportMask==fullTrackerReportMask)</CODE>" to "<CODE>if(trackerReportMask != 0)</CODE>"
#: <CODE>% $EDITOR VRDeviceDaemon/VRDeviceManager.cpp</CODE>
<LI> Compile
#:* Change: "<CODE>if(trackerReportMask==fullTrackerReportMask)</CODE>" to "<CODE>if(trackerReportMask != 0)</CODE>"
: <CODE>% make -j 8</CODE>
# Fix another bug ''(proper window placement)''
:: (this will take less than a minute)
#: <CODE>% $EDITOR GL/GLWindow.cpp</CODE>
<LI> Install
#:* Add after <CODE>XMapWindow(display,window);</CODE>
: <CODE>% sudo make install</CODE>
        /* since XCreateWindow() doesn't properly place the window, we need to move it to the correct location */
</OL>
        XMoveWindow(display, window, windowPos.origin[0],windowPos.origin[1]);
# Add a feature ''(remove decorations on full-screen displays)''
#: <CODE>% $EDITOR GL/GLWindow.cpp</CODE>
#:* Add after <CODE>window=XCreateWindow(...)</CODE>
      /* Add a block to turn off decorations when window is as big as one screen */
      if ((windowPos.size[0] == 1920) && (windowPos.size[1] == 1080)) {
              unsigned long  wm_hints[5] = { 2, 0, 0, 0, 0 };        /* the 4th element isn't really unsigned, but it's zero, so who cares */
              XChangeProperty(display, window, XInternAtom(display, "_MOTIF_WM_HINTS", False), XInternAtom(display, "_MOTIF_WM_HINTS", False), 32, PropModeReplace, (const unsigned char *)wm_hints, 5);
      }
# Compile
#: <CODE>% make -j 8</CODE>
#:: (this will take less than a minute)
# Install
#: <CODE>% sudo mkdir -p /opt/VR/Vrui-1.0-068</CODE> ''(or whatever version you are compiling)''
#: <CODE>% sudo make install</CODE>
#:: (NOTE: after subsequent installs, you'll have to go to $INSTALLDIR and copy back from the saved backup config files)
 
That's it!
That's it!


Line 83: Line 77:
** [http://idav.ucdavis.edu/~okreylos/ResDev/Vrui/Documentation/VruiConfigurationFile.html The Vrui Configuration File]
** [http://idav.ucdavis.edu/~okreylos/ResDev/Vrui/Documentation/VruiConfigurationFile.html The Vrui Configuration File]
** [http://idav.ucdavis.edu/~okreylos/ResDev/Vrui/Documentation/VruiConfigurationFileReference.html Vrui Configuration File Settings Reference]
** [http://idav.ucdavis.edu/~okreylos/ResDev/Vrui/Documentation/VruiConfigurationFileReference.html Vrui Configuration File Settings Reference]
As of Vrui version 2.7, there is a handy Vrui application called "<CODE>DrawEnvironment</CODE>"
that will display a representation of the screens and tracked objects of the current configuration.
This can come in quite handy when troubleshooting configuration difficulties &mdash; of course,
you need to have something partially working to make use of it.
Here are some unorganized bits of information as I encounter them during my trials (and tribulations):
* Comments are denoted with the hash (<CODE>#</CODE>) symbol through the end-of-line
* When discussing Vrui configuration options, a directory-like syntax is used by the Vrui library (but not the configuration file).  In the configuration files, sections have sections within them.
* In Vrui.cfg, the "root" section is the one selected for use, when not specified on the command line with the <CODE>-rootSection</CODE> option it defaults to <CODE>Desktop</CODE>
* In theory Vrui can use any coordinate frame.  In practice, use Z-up since applications seem to assume this.
** thus, always set <CODE>root/upDirection (0.0, 0.0, 1.0)</CODE>
* Windows and Screens go hand-in-hand ''(I'd prefer them to be a single entity)''
* root/displayCenter &mdash; the place where the world will go when centering the display (including initial location)
* root/displaySize controls the relative size that the vis-world is rendered.  A good rule-of-thumb is to set this to be half the front screen's diagonal




Line 91: Line 101:
#: <CODE>% cd ExamplePrograms</CODE>
#: <CODE>% cd ExamplePrograms</CODE>
#: <CODE>% $EDITOR makefile</CODE>
#: <CODE>% $EDITOR makefile</CODE>
#:* ''for Vrui 2.x & 3.x:'' set <CODE>VRUI_MAKEDIR</CODE> to "<CODE>/opt/VR/Vrui-2.7-001/share/make</CODE>"
#:* ''for Vrui 1.x:'' set <CODE>VRUIDIR</CODE> to "<CODE>/opt/VR/Vrui-1.0-068</CODE>"
#:* ''for Vrui 1.x:'' set <CODE>VRUIDIR</CODE> to "<CODE>/opt/VR/Vrui-1.0-068</CODE>"
#:* ''for Vrui 2.x:'' set <CODE>VRUI_MAKEDIR</CODE> to "<CODE>/opt/VR/Vrui-2.3-001/share/make</CODE>"
# Compile
# Compile
#: <CODE>% make</CODE>
#: <CODE>% make</CODE>
Line 103: Line 113:
=See Also=
=See Also=
* [http://idav.ucdavis.edu/~okreylos/ResDev/Vrui Oliver Kreylos' Vrui page]
* [http://idav.ucdavis.edu/~okreylos/ResDev/Vrui Oliver Kreylos' Vrui page]
* [http://idav.ucdavis.edu/~okreylos/ResDev/Vrui/Vrui20ReleaseNotes.html Changes between Vrui 1.x and 2.x]
* [https://web.avl.indiana.edu/wiki/index.php?title=Vrui IU AVL Wiki's Vrui page] (which will often be in sync with this page) (Login required)
* [https://web.avl.indiana.edu/wiki/index.php?title=Vrui IU AVL Wiki's Vrui page] (which will often be in sync with this page) (Login required)
* [http://visualideation.org/mediawiki/index.php?title=Vrui VisualIdeation Wiki's Vrui page] (Login required)
* [http://vruione.org An unofficial continuation of the Vrui 1.x series]

Latest revision as of 03:24, 22 November 2013

Vrui VR integration library

Vrui is a VR integration library from the University of California at Davis' KeckCAVEs facility. Vrui takes the approach of providing a framework into which applications are integrated and can take advantage of many different plugin tools and navigation controls that are independently created from the application.

There are pre-existing Vrui_Applications written at UC-Davis and DRI/INL as part of our immersive visualization ensemble. But before using a Vrui application, one must first install and configure Vrui.

Vrui Versions

Vrui LidarViewer

There are currently three branches of Vrui (the 1.0 line, the 2.x line and the 3.x line). There are some significant differences, including many changes to the API, as well as to the DeviceDaemon protocol.

If you have applications written for multiple lines of the Vrui library, then you will need to have each branch installed. Fortunately, this is rather easy to do, and following these directions will ensure that your system will work with multiple versions of Vrui installed.

This page has most recently been updated for Vrui version 2.7-001, but much of the configuration details are the same for version 3.0-002. At the same time I have removed specific references to the Vrui 1.0 line, but as this is a wiki, past versions are saved in perpetuity:

Vrui Dependencies

Basic Vrui depends only on two packages which are generally installed on any self-respecting computer:

  • OpenGL
  • X-windows

There are also a number of highly-recommended packages that will enhance Vrui:

  • zlib-devel
  • libpng-devel
  • libjpeg-devel
  • libtiff-devel
  • libasound2-dev
  • bluez-libs-devel

Installing Vrui

These instructions have been tested with Vrui version 2.7-001, but should generally work for other versions of Vrui.

  1. Download Vrui
    Download from the Vrui Download page
  2. Untar in a local directory
    % tar -zxf Vrui-2.7-001.tar.gz
    % cd Vrui-2.7-001
  3. Adjust the makefile
    % $EDITOR makefile
    • set INSTALLDIR to "/opt/VR/Vrui-2.7-001"
      NOTE: adding the build-version to INSTALLDIR helps avoid issues when upgrading
  4. Fix a bug (update tracking for single tracker)
    % $EDITOR VRDeviceDaemon/VRDeviceManager.cpp
    • Change: "if(trackerReportMask==fullTrackerReportMask)" to "if(trackerReportMask != 0)"
  5. Compile
    % make -j 8
    (this will take less than a minute)
  6. Install
    % sudo make install

That's it!

Configuring Vrui

Configuring Vrui can be a very difficult task. A general hint is to find a working configuration setup that's close to what you want to do and then modify! As we gain more experience, we will put more specific advice/instructions here.

In the meantime, here are links to other sources of information:

As of Vrui version 2.7, there is a handy Vrui application called "DrawEnvironment" that will display a representation of the screens and tracked objects of the current configuration. This can come in quite handy when troubleshooting configuration difficulties — of course, you need to have something partially working to make use of it.

Here are some unorganized bits of information as I encounter them during my trials (and tribulations):

  • Comments are denoted with the hash (#) symbol through the end-of-line
  • When discussing Vrui configuration options, a directory-like syntax is used by the Vrui library (but not the configuration file). In the configuration files, sections have sections within them.
  • In Vrui.cfg, the "root" section is the one selected for use, when not specified on the command line with the -rootSection option it defaults to Desktop
  • In theory Vrui can use any coordinate frame. In practice, use Z-up since applications seem to assume this.
    • thus, always set root/upDirection (0.0, 0.0, 1.0)
  • Windows and Screens go hand-in-hand (I'd prefer them to be a single entity)
  • root/displayCenter — the place where the world will go when centering the display (including initial location)
  • root/displaySize controls the relative size that the vis-world is rendered. A good rule-of-thumb is to set this to be half the front screen's diagonal


Compiling Vrui Applications

Vrui comes with some example programs that can be quickly compiled and used for experimentation.

  1. Adjust the makefile
    % cd ExamplePrograms
    % $EDITOR makefile
    • for Vrui 2.x & 3.x: set VRUI_MAKEDIR to "/opt/VR/Vrui-2.7-001/share/make"
    • for Vrui 1.x: set VRUIDIR to "/opt/VR/Vrui-1.0-068"
  2. Compile
    % make
  3. Run
    % ls bin
    % bin/VruiDemo
    This should open a window with a spinning cube.


See Also