| 1 |
<html><head> |
|---|
| 2 |
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> |
|---|
| 3 |
<title>Juggler Project Overview</title><link rel="stylesheet" href="base_style.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.62.4"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article" lang="en"><div class="titlepage"><div><div><h1 class="title"><a name="d0e1"></a>Juggler Project Overview</h1></div><div><div class="authorgroup"><div class="author"><h3 class="author"><span class="othername">The Juggler Team</span></h3></div></div></div><div><p class="pubdate">$Date$</p></div></div><div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="section"><a href="#d0e15">Introduction</a></span></dt><dt><span class="section"><a href="#d0e26">Compiling</a></span></dt><dt><span class="section"><a href="#modules-section">Modules</a></span></dt><dd><dl><dt><span class="section"><a href="#d0e42">VR Juggler</a></span></dt><dt><span class="section"><a href="#d0e56">VR Juggler Portable Runtime (VPR)</a></span></dt><dt><span class="section"><a href="#d0e93">Juggler Configuration and Control Library (JCCL)</a></span></dt><dt><span class="section"><a href="#d0e117">Gadgeteer</a></span></dt><dt><span class="section"><a href="#d0e131">Sonix</a></span></dt><dt><span class="section"><a href="#d0e147">Tweek</a></span></dt><dt><span class="section"><a href="#d0e163">VRJConfig</a></span></dt></dl></dd><dt><span class="section"><a href="#d0e175">VR Juggler 2.0</a></span></dt></dl></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e15"></a>Introduction</h2></div></div><div></div></div><p>Congratulations, you have downloaded the source code to the Juggler |
|---|
| 4 |
Project, open source software for virtual reality from the <a href="http://www.vrac.iastate.edu/" target="_top">Virtual Reality Applications Center</a> |
|---|
| 5 |
at <a href="http://www.iastate.edu/" target="_top">Iowa State University</a>. |
|---|
| 6 |
Within this document, you will find information about the new VR Juggler |
|---|
| 7 |
2.0 directory structure including descriptions of all the component |
|---|
| 8 |
modules that make up the Juggler Project. Instructions for building the |
|---|
| 9 |
individual modules can be found within the specific module directories and |
|---|
| 10 |
on the VR Juggler website.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e26"></a>Compiling</h2></div></div><div></div></div><p>For information on compiling the source code, refer to either the |
|---|
| 11 |
<tt class="filename">INSTALL.txt</tt> or <tt class="filename">INSTALL.html</tt> file |
|---|
| 12 |
found in this directory.</p></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="modules-section"></a>Modules</h2></div></div><div></div></div><p>The Juggler Project is made up of several modules that have evolved |
|---|
| 13 |
from the original VR Juggler source tree. Within this section, we describe |
|---|
| 14 |
each of the modules, what they are used for, and, when possible, how they |
|---|
| 15 |
relate to VR Juggler 1.0.</p><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e42"></a>VR Juggler</h3></div></div><div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e45"></a>Directory</h4></div></div><div></div></div><p><tt class="filename">juggler/modules/vrjuggler</tt></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e51"></a>Description</h4></div></div><div></div></div><p>VR Juggler is still VR Juggler. There are many new features in |
|---|
| 16 |
VR Juggler since the 1.0 series, but in essence, it is still the same |
|---|
| 17 |
familiar tool. Of the projects listed below, VR Juggler depends on |
|---|
| 18 |
VPR, JCCL, Sonix, and Gadgeteer. Its individual components have simply |
|---|
| 19 |
been broken out into individually developed modules. More information |
|---|
| 20 |
about the latest version of VR Juggler is given in the following |
|---|
| 21 |
section.</p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e56"></a>VR Juggler Portable Runtime (VPR)</h3></div></div><div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e59"></a>Directory</h4></div></div><div></div></div><p><tt class="filename">juggler/modules/vapor</tt></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e65"></a>Description</h4></div></div><div></div></div><p>VPR is the foundation for all the Juggler modules. It provides |
|---|
| 22 |
an object-oriented, cross-platform abstraction layer to common |
|---|
| 23 |
operating system features such as threads, semaphores, and sockets. |
|---|
| 24 |
All the other modules depend on VPR so that they may be ported easily |
|---|
| 25 |
to other platforms. In VR Juggler 1.0, VPR was the collection of |
|---|
| 26 |
directories Threads, SharedMem, and Sync. Since then, that code has |
|---|
| 27 |
been collected into a single library and greatly extended into what is |
|---|
| 28 |
now VPR.</p><p>VPR itself contains a great deal of platform-specific code. It |
|---|
| 29 |
categorizes this code into subsystems, and various subsystems may be |
|---|
| 30 |
chosen depending upon the target platform and target threading system. |
|---|
| 31 |
For example, on IRIX, there are three possible subsystems: SPROC, |
|---|
| 32 |
POSIX, and Netscape Portable Runtime (NSPR). Win32, on the other hand, |
|---|
| 33 |
only uses the NSPR subsystem. The subsystems are:</p><div class="itemizedlist"><ul type="disc"><li><p>SPROC (IRIX only)</p></li><li><p>POSIX (UNIX-based platforms only)</p></li><li><p>NSPR (all platforms, required on Win32 and Mac OS X)</p></li></ul></div><p>Because VPR is the foundation for all the other modules, it is |
|---|
| 34 |
important to choose the right subsystem.</p><p>Choosing the correct subsystem depends on many factors. For |
|---|
| 35 |
example, which of the subsystems are supported on the desired target |
|---|
| 36 |
platform? Are there compatibility issues with software outside the |
|---|
| 37 |
Juggler Project? In most cases, however, the choice is |
|---|
| 38 |
straightforward. Indeed, IRIX is the only platform that presents any |
|---|
| 39 |
real issues. In particular, the use of OpenGL Performer from SGI |
|---|
| 40 |
raises important compatibility concerns. SPROC threads are the only |
|---|
| 41 |
threads that are stable with OpenGL Performer (on IRIX). POSIX threads |
|---|
| 42 |
will work, but applications may sometimes crash on startup. As of this |
|---|
| 43 |
writing, OpenGL Performer does not work at all with NSPR. Other |
|---|
| 44 |
software may pose similar problems, and it is important to know the |
|---|
| 45 |
needs of other tools when configuring VPR.</p><p>On platforms other than IRIX, the choice is relatively simple. |
|---|
| 46 |
If NSPR is available, its use is recommended. If NSPR is not |
|---|
| 47 |
available, POSIX threads is the next logical choice--at least on |
|---|
| 48 |
UNIX-based platforms. On Win32 and Mac OS X, NSPR is required.</p><p>As mentioned above, all the other modules depend on VPR, so it |
|---|
| 49 |
must be compiled before anything else. For more information on |
|---|
| 50 |
compiling VPR, refer to <tt class="filename">modules/vapor/INSTALL.txt</tt>.</p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e93"></a>Juggler Configuration and Control Library (JCCL)</h3></div></div><div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e96"></a>Directory</h4></div></div><div></div></div><p><tt class="filename">juggler/modules/jackal</tt></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e102"></a>Description</h4></div></div><div></div></div><p>JCCL provides the configuration layer for VR Juggler and other |
|---|
| 51 |
modules. The config chunks and reusable configuration editor JavaBeans |
|---|
| 52 |
come from JCCL. These JavaBeans are used by the VR Juggler |
|---|
| 53 |
configuration editor tool, VRJConfig (see below). In essence, JCCL is |
|---|
| 54 |
the VR Juggler 1.0 Config directory with many new features including |
|---|
| 55 |
XML-based config files.</p><p>To build the JCCL C++ library, CppDOM is required for parsing |
|---|
| 56 |
XML. CppDOM is a lightweight XML parser written in C++ and designed to |
|---|
| 57 |
provide an interface similar to JDOM. More information can be found at |
|---|
| 58 |
<a href="http://xml-cppdom.sourceforge.net/" target="_top">http://xml-cppdom.sourceforge.net/</a>.</p><p>To build the configuration editor JavaBeans, JDOM and the Tweek |
|---|
| 59 |
Java API are required. Tweek is another module in the Juggler Project, |
|---|
| 60 |
and it will be built automatically as a dependency of JCCL. JDOM comes |
|---|
| 61 |
with the Juggler Project source code and can be found in the directory |
|---|
| 62 |
<tt class="filename">juggler/external/jdom</tt>.</p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e117"></a>Gadgeteer</h3></div></div><div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e120"></a>Directory</h4></div></div><div></div></div><p><tt class="filename">juggler/modules/gadgeteer</tt></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e126"></a>Description</h4></div></div><div></div></div><p>Gadgeteer is made up of the code that was formerly in the VR |
|---|
| 63 |
Juggler 1.0 Input directory. It contains all the drivers used for VR |
|---|
| 64 |
Juggler input devices, and it contains the high-level Input Manager. |
|---|
| 65 |
The goal with Gadgeteer is to mold it into the first dynamically |
|---|
| 66 |
loadable component within the VR Juggler microkernel. At this time, it |
|---|
| 67 |
must still be compiled in, but we hope to generalize the concepts of |
|---|
| 68 |
VR Juggler Managers to the point that the kernel knows nothing about |
|---|
| 69 |
them until they are loaded at run time.</p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e131"></a>Sonix</h3></div></div><div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e134"></a>Directory</h4></div></div><div></div></div><p><tt class="filename">juggler/modules/sonix</tt></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e140"></a>Description</h4></div></div><div></div></div><p>Sonix provides an interface useful to many simple VR and |
|---|
| 70 |
entertainment applications to trigger and position sounds in 3D. This |
|---|
| 71 |
library provides simple audio sound objects on top of several audio |
|---|
| 72 |
APIs. The interface to Sonix is kept very simple in order to get |
|---|
| 73 |
people up and running with sound as fast as possible.</p><p>The interface to sonix is kept very simple in order to get |
|---|
| 74 |
people up and running with sound as fast as possible. Sonix is |
|---|
| 75 |
reconfigurable allowing audio APIs to be safely swapped out at runtime |
|---|
| 76 |
without the dependent systems noticing. Systems using this layer |
|---|
| 77 |
expect to be completely portable.</p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e147"></a>Tweek</h3></div></div><div></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e150"></a>Directory</h4></div></div><div></div></div><p><tt class="filename">juggler/modules/tweek</tt></p></div><div class="section" lang="en"><div class="titlepage"><div><div><h4 class="title"><a name="d0e156"></a>Description</h4></div></div><div></div></div><p>Tweek is a cross-platform, cross-language library consisting of |
|---|
| 78 |
a C++ API and a Java API. Its purpose is to provide a convenient |
|---|
| 79 |
mechanism for a Java-based GUI to interact with a complex C++ library |
|---|
| 80 |
or application. The Tweek GUI can be run in virtual environments, |
|---|
| 81 |
external on a palm top, or on the desktop next to a running |
|---|
| 82 |
application. Each of these methods gives a familiar 2D widget set that |
|---|
| 83 |
can control applications flexibly. To provide this capability, it uses |
|---|
| 84 |
CORBA.</p><p>The Java code in Tweek includes the Tweek Java API and the Tweek |
|---|
| 85 |
JavaBean loader application. The Java API is provided to make the use |
|---|
| 86 |
of JavaBeans and CORBA simpler for programmers. The JavaBean loader |
|---|
| 87 |
application simply loads the Beans it finds and presents them to the |
|---|
| 88 |
user in some sort of structured manner (for example, a collection of |
|---|
| 89 |
icons with web-style navigation).</p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="d0e163"></a>VRJConfig</h3></div></div><div></div></div><p>VRJConfig is the configuration editor for VR Juggler. It is a |
|---|
| 90 |
complete rewrite of VjControl, both in terms of the user interface and |
|---|
| 91 |
the back-end code. The new interface is based on open discussion and |
|---|
| 92 |
feedback from users of VR Juggler 1.0 and VjControl.</p><p>The back-end is much more extensible. It allows users to write |
|---|
| 93 |
plug-in editors to simplify complex editing tasks. User-defined |
|---|
| 94 |
configuration elements can be handled in a much more dynamic manner as |
|---|
| 95 |
well. No modification of VR Juggler or JCCL “<span class="quote">system</span>” files |
|---|
| 96 |
must be made to get user-defined elements into the editor.</p><p>VRJConfig is itself a JavaBean that is loaded into the Tweek Java |
|---|
| 97 |
GUI. VRJConfig uses JavaBeans internally to facilitate user extensions. |
|---|
| 98 |
All in all, VRJConfig is a highly dynamic, powerful editor for VR |
|---|
| 99 |
Juggler configurations.</p></div></div><div class="section" lang="en"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="d0e175"></a>VR Juggler 2.0</h2></div></div><div></div></div><p>TODO... (this is the version number of the next release of Juggler)</p></div></div></body></html> |
|---|