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.

ImmersiveVTK

From IQ-Station Wiki
Revision as of 11:45, 14 June 2011 by 156.56.12.104 (talk)
Jump to navigation Jump to search

** NOTE: This page is currently unreferenced by the IQ-station wiki, as it is yet preliminary, and thus intended as a means of communication between those working on the effort. However, the page should, as much as possible, be designed with an eye toward being a fully public page. **

File:CEP 3001.jpg
Projectors from the Sponsae Christi event.

Immersive VTK

VTK is a general-purpose visualization library that is widely used by the Scientific Visualization Community. VTK is supported by the commercial company Kitware, Inc.

There are also many general-purpose user-oriented tools built on VTK, including Kitware's ParaView, as well as VisIt.

Recently, Kitware has been supported by Idaho National Lab to add immersive functionality to ParaView. As part of this effort, VTK is also gaining capabilities.

Through now, the focus has been (and still is) on enabling off-axis rendering through the standard vtkCamera class. Future enhancements will include

This page describes how to compile, configure, and run VTK with these extensions.

How to Run Immersive VTK

  • Presently, Bill uses a TCL script he wrote that can read the Vrui 1.0 VRDeviceDaemon protocol and then set the eye/head position from the incoming stream.
  • ...

How to Download Immersive VTK

Immersive VTK is currently only available as a special git development branch known as "vtk-stereo".

... (Aashish can explain this part)


How to Compile Immersive VTK

Basically compilation is no different than any trunk/branch of VTK.

But there are some cmake flags that I set to speed things up since I compile frequently:

  • % cd build
  • % ccmake ../vtk-stereo
    • set BUILD_EXAMPLES to OFF
    • set BUILD_SHARED_LIBS to OFF
    • set BUILD_TESTING to OFF
    • set VTK_WRAP_TCL to ON (since I use a Tcl script for testing)
    • 'c' to configure (may have to repeat once)
    • 'g' to generate
  • % make -j 8 (or however many threads are desired)


The Immersive VTK API

There are several new methods/values associated with the vtkCamera class designed to enable quick and easy usage of off-axis rendering.

  • vtkCamera::SetScreenBottomLeft <x> <y> <z>
  • vtkCamera::SetScreenBottomRight <x> <y> <z>
  • vtkCamera::SetScreenTopRight <x> <y> <z>
  • vtkCamera::SetEyePosition <x> <y> <z> -- really just sets the location of the center of the two eyes
  • vtkCamera::SetUseDeeringFrustrum <flag> -- NOTE: new version will remove the extra 'r'

Here are some methods added by Bill:

  • vtkRenderWindow::SetXDisplay <screen> -- actually this sets the screen portion of the display (BS: I couldn't figure out how to do strings, so just did the screen number since that's all I need for testing in the CAVE -- and I'll let Kitware do things the proper way).

And for stereo, there are the already-existing methods:

  • vtkRenderWindow::SetStereoCapableWindow <flag> -- for active stereo (must be done before the window is opened)
  • vtkRenderWindow::SetStereoTypeToCrystalEyes -- for active stereo
  • vtkRenderWindow::SetStereoRender <flag> -- set to 1 to turn stereo on

Immersive VTK Internals

...


Outstanding Issues

  • The Deering off-axis rendering code still doesn't work. :-(
  • vtkXOpenGLRenderWindow class
    • should have the means to specify which display to render to
    • should probably call the CreateAWindow() method instead of XOpenDisplay() all over the place.
  • Thus the vtkRenderWindow class should have a value and method to set the display context that is passed down to the hardware handlers (such as vtkXOpenGLRenderWindow).
  • I get this odd bug where the render window freezes when I first start the tracking loop