| 1 |
<?xml version="1.0" encoding="UTF-8"?> |
|---|
| 2 |
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" |
|---|
| 3 |
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd"> |
|---|
| 4 |
<article lang="en"> |
|---|
| 5 |
<articleinfo> |
|---|
| 6 |
<title>Juggler Project Overview</title> |
|---|
| 7 |
|
|---|
| 8 |
<authorgroup> |
|---|
| 9 |
<author> |
|---|
| 10 |
<othername>The Juggler Team</othername> |
|---|
| 11 |
</author> |
|---|
| 12 |
</authorgroup> |
|---|
| 13 |
|
|---|
| 14 |
<pubdate>$Date$</pubdate> |
|---|
| 15 |
</articleinfo> |
|---|
| 16 |
|
|---|
| 17 |
<section> |
|---|
| 18 |
<title>Introduction</title> |
|---|
| 19 |
|
|---|
| 20 |
<para>Congratulations, you have downloaded the source code to the Juggler |
|---|
| 21 |
Project, open source software for virtual reality from the <ulink |
|---|
| 22 |
url="http://www.vrac.iastate.edu/">Virtual Reality Applications Center</ulink> |
|---|
| 23 |
at <ulink url="http://www.iastate.edu/">Iowa State University</ulink>. |
|---|
| 24 |
Within this document, you will find information about the new VR Juggler |
|---|
| 25 |
2.0 directory structure including descriptions of all the component |
|---|
| 26 |
modules that make up the Juggler Project. Instructions for building the |
|---|
| 27 |
individual modules can be found within the specific module directories and |
|---|
| 28 |
on the VR Juggler website.</para> |
|---|
| 29 |
</section> |
|---|
| 30 |
|
|---|
| 31 |
<section> |
|---|
| 32 |
<title>Compiling</title> |
|---|
| 33 |
|
|---|
| 34 |
<para>For information on compiling the source code, refer to either the |
|---|
| 35 |
<filename>INSTALL.txt</filename> or <filename>INSTALL.html</filename> file |
|---|
| 36 |
found in this directory.</para> |
|---|
| 37 |
</section> |
|---|
| 38 |
|
|---|
| 39 |
<section id="modules-section"> |
|---|
| 40 |
<title>Modules</title> |
|---|
| 41 |
|
|---|
| 42 |
<para>The Juggler Project is made up of several modules that have evolved |
|---|
| 43 |
from the original VR Juggler source tree. Within this section, we describe |
|---|
| 44 |
each of the modules, what they are used for, and, when possible, how they |
|---|
| 45 |
relate to VR Juggler 1.0.</para> |
|---|
| 46 |
|
|---|
| 47 |
<section> |
|---|
| 48 |
<title>VR Juggler</title> |
|---|
| 49 |
|
|---|
| 50 |
<section> |
|---|
| 51 |
<title>Directory</title> |
|---|
| 52 |
|
|---|
| 53 |
<para><filename>juggler/modules/vrjuggler</filename></para> |
|---|
| 54 |
</section> |
|---|
| 55 |
|
|---|
| 56 |
<section> |
|---|
| 57 |
<title>Description</title> |
|---|
| 58 |
|
|---|
| 59 |
<para>VR Juggler is still VR Juggler. There are many new features in |
|---|
| 60 |
VR Juggler since the 1.0 series, but in essence, it is still the same |
|---|
| 61 |
familiar tool. Of the projects listed below, VR Juggler depends on |
|---|
| 62 |
VPR, JCCL, Sonix, and Gadgeteer. Its individual components have simply |
|---|
| 63 |
been broken out into individually developed modules. More information |
|---|
| 64 |
about the latest version of VR Juggler is given in the following |
|---|
| 65 |
section.</para> |
|---|
| 66 |
</section> |
|---|
| 67 |
</section> |
|---|
| 68 |
|
|---|
| 69 |
<section> |
|---|
| 70 |
<title>VR Juggler Portable Runtime (VPR)</title> |
|---|
| 71 |
|
|---|
| 72 |
<section> |
|---|
| 73 |
<title>Directory</title> |
|---|
| 74 |
|
|---|
| 75 |
<para><filename>juggler/modules/vapor</filename></para> |
|---|
| 76 |
</section> |
|---|
| 77 |
|
|---|
| 78 |
<section> |
|---|
| 79 |
<title>Description</title> |
|---|
| 80 |
|
|---|
| 81 |
<para>VPR is the foundation for all the Juggler modules. It provides |
|---|
| 82 |
an object-oriented, cross-platform abstraction layer to common |
|---|
| 83 |
operating system features such as threads, semaphores, and sockets. |
|---|
| 84 |
All the other modules depend on VPR so that they may be ported easily |
|---|
| 85 |
to other platforms. In VR Juggler 1.0, VPR was the collection of |
|---|
| 86 |
directories Threads, SharedMem, and Sync. Since then, that code has |
|---|
| 87 |
been collected into a single library and greatly extended into what is |
|---|
| 88 |
now VPR.</para> |
|---|
| 89 |
|
|---|
| 90 |
<para>VPR itself contains a great deal of platform-specific code. It |
|---|
| 91 |
categorizes this code into subsystems, and various subsystems may be |
|---|
| 92 |
chosen depending upon the target platform and target threading system. |
|---|
| 93 |
For example, on IRIX, there are three possible subsystems: SPROC, |
|---|
| 94 |
POSIX, and Netscape Portable Runtime (NSPR). Win32, on the other hand, |
|---|
| 95 |
only uses the NSPR subsystem. The subsystems are:</para> |
|---|
| 96 |
|
|---|
| 97 |
<itemizedlist> |
|---|
| 98 |
<listitem> |
|---|
| 99 |
<para>SPROC (IRIX only)</para> |
|---|
| 100 |
</listitem> |
|---|
| 101 |
|
|---|
| 102 |
<listitem> |
|---|
| 103 |
<para>POSIX (UNIX-based platforms only)</para> |
|---|
| 104 |
</listitem> |
|---|
| 105 |
|
|---|
| 106 |
<listitem> |
|---|
| 107 |
<para>NSPR (all platforms, required on Win32 and Mac OS X)</para> |
|---|
| 108 |
</listitem> |
|---|
| 109 |
</itemizedlist> |
|---|
| 110 |
|
|---|
| 111 |
<para>Because VPR is the foundation for all the other modules, it is |
|---|
| 112 |
important to choose the right subsystem.</para> |
|---|
| 113 |
|
|---|
| 114 |
<para>Choosing the correct subsystem depends on many factors. For |
|---|
| 115 |
example, which of the subsystems are supported on the desired target |
|---|
| 116 |
platform? Are there compatibility issues with software outside the |
|---|
| 117 |
Juggler Project? In most cases, however, the choice is |
|---|
| 118 |
straightforward. Indeed, IRIX is the only platform that presents any |
|---|
| 119 |
real issues. In particular, the use of OpenGL Performer from SGI |
|---|
| 120 |
raises important compatibility concerns. SPROC threads are the only |
|---|
| 121 |
threads that are stable with OpenGL Performer (on IRIX). POSIX threads |
|---|
| 122 |
will work, but applications may sometimes crash on startup. As of this |
|---|
| 123 |
writing, OpenGL Performer does not work at all with NSPR. Other |
|---|
| 124 |
software may pose similar problems, and it is important to know the |
|---|
| 125 |
needs of other tools when configuring VPR.</para> |
|---|
| 126 |
|
|---|
| 127 |
<para>On platforms other than IRIX, the choice is relatively simple. |
|---|
| 128 |
If NSPR is available, its use is recommended. If NSPR is not |
|---|
| 129 |
available, POSIX threads is the next logical choice--at least on |
|---|
| 130 |
UNIX-based platforms. On Win32 and Mac OS X, NSPR is required.</para> |
|---|
| 131 |
|
|---|
| 132 |
<para>As mentioned above, all the other modules depend on VPR, so it |
|---|
| 133 |
must be compiled before anything else. For more information on |
|---|
| 134 |
compiling VPR, refer to <filename>modules/vapor/INSTALL.txt</filename>.</para> |
|---|
| 135 |
</section> |
|---|
| 136 |
</section> |
|---|
| 137 |
|
|---|
| 138 |
<section> |
|---|
| 139 |
<title>Juggler Configuration and Control Library (JCCL)</title> |
|---|
| 140 |
|
|---|
| 141 |
<section> |
|---|
| 142 |
<title>Directory</title> |
|---|
| 143 |
|
|---|
| 144 |
<para><filename>juggler/modules/jackal</filename></para> |
|---|
| 145 |
</section> |
|---|
| 146 |
|
|---|
| 147 |
<section> |
|---|
| 148 |
<title>Description</title> |
|---|
| 149 |
|
|---|
| 150 |
<para>JCCL provides the configuration layer for VR Juggler and other |
|---|
| 151 |
modules. The config chunks and reusable configuration editor JavaBeans |
|---|
| 152 |
come from JCCL. These JavaBeans are used by the VR Juggler |
|---|
| 153 |
configuration editor tool, VRJConfig (see below). In essence, JCCL is |
|---|
| 154 |
the VR Juggler 1.0 Config directory with many new features including |
|---|
| 155 |
XML-based config files.</para> |
|---|
| 156 |
|
|---|
| 157 |
<para>To build the JCCL C++ library, CppDOM is required for parsing |
|---|
| 158 |
XML. CppDOM is a lightweight XML parser written in C++ and designed to |
|---|
| 159 |
provide an interface similar to JDOM. More information can be found at |
|---|
| 160 |
<ulink url="http://xml-cppdom.sourceforge.net/">http://xml-cppdom.sourceforge.net/</ulink>.</para> |
|---|
| 161 |
|
|---|
| 162 |
<para>To build the configuration editor JavaBeans, JDOM and the Tweek |
|---|
| 163 |
Java API are required. Tweek is another module in the Juggler Project, |
|---|
| 164 |
and it will be built automatically as a dependency of JCCL. JDOM comes |
|---|
| 165 |
with the Juggler Project source code and can be found in the directory |
|---|
| 166 |
<filename>juggler/external/jdom</filename>.</para> |
|---|
| 167 |
</section> |
|---|
| 168 |
</section> |
|---|
| 169 |
|
|---|
| 170 |
<section> |
|---|
| 171 |
<title>Gadgeteer</title> |
|---|
| 172 |
|
|---|
| 173 |
<section> |
|---|
| 174 |
<title>Directory</title> |
|---|
| 175 |
|
|---|
| 176 |
<para><filename>juggler/modules/gadgeteer</filename></para> |
|---|
| 177 |
</section> |
|---|
| 178 |
|
|---|
| 179 |
<section> |
|---|
| 180 |
<title>Description</title> |
|---|
| 181 |
|
|---|
| 182 |
<para>Gadgeteer is made up of the code that was formerly in the VR |
|---|
| 183 |
Juggler 1.0 Input directory. It contains all the drivers used for VR |
|---|
| 184 |
Juggler input devices, and it contains the high-level Input Manager. |
|---|
| 185 |
The goal with Gadgeteer is to mold it into the first dynamically |
|---|
| 186 |
loadable component within the VR Juggler microkernel. At this time, it |
|---|
| 187 |
must still be compiled in, but we hope to generalize the concepts of |
|---|
| 188 |
VR Juggler Managers to the point that the kernel knows nothing about |
|---|
| 189 |
them until they are loaded at run time.</para> |
|---|
| 190 |
</section> |
|---|
| 191 |
</section> |
|---|
| 192 |
|
|---|
| 193 |
<section> |
|---|
| 194 |
<title>Sonix</title> |
|---|
| 195 |
|
|---|
| 196 |
<section> |
|---|
| 197 |
<title>Directory</title> |
|---|
| 198 |
|
|---|
| 199 |
<para><filename>juggler/modules/sonix</filename></para> |
|---|
| 200 |
</section> |
|---|
| 201 |
|
|---|
| 202 |
<section> |
|---|
| 203 |
<title>Description</title> |
|---|
| 204 |
|
|---|
| 205 |
<para>Sonix provides an interface useful to many simple VR and |
|---|
| 206 |
entertainment applications to trigger and position sounds in 3D. This |
|---|
| 207 |
library provides simple audio sound objects on top of several audio |
|---|
| 208 |
APIs. The interface to Sonix is kept very simple in order to get |
|---|
| 209 |
people up and running with sound as fast as possible.</para> |
|---|
| 210 |
|
|---|
| 211 |
<para>The interface to sonix is kept very simple in order to get |
|---|
| 212 |
people up and running with sound as fast as possible. Sonix is |
|---|
| 213 |
reconfigurable allowing audio APIs to be safely swapped out at runtime |
|---|
| 214 |
without the dependent systems noticing. Systems using this layer |
|---|
| 215 |
expect to be completely portable.</para> |
|---|
| 216 |
</section> |
|---|
| 217 |
</section> |
|---|
| 218 |
|
|---|
| 219 |
<section> |
|---|
| 220 |
<title>Tweek</title> |
|---|
| 221 |
|
|---|
| 222 |
<section> |
|---|
| 223 |
<title>Directory</title> |
|---|
| 224 |
|
|---|
| 225 |
<para><filename>juggler/modules/tweek</filename></para> |
|---|
| 226 |
</section> |
|---|
| 227 |
|
|---|
| 228 |
<section> |
|---|
| 229 |
<title>Description</title> |
|---|
| 230 |
|
|---|
| 231 |
<para>Tweek is a cross-platform, cross-language library consisting of |
|---|
| 232 |
a C++ API and a Java API. Its purpose is to provide a convenient |
|---|
| 233 |
mechanism for a Java-based GUI to interact with a complex C++ library |
|---|
| 234 |
or application. The Tweek GUI can be run in virtual environments, |
|---|
| 235 |
external on a palm top, or on the desktop next to a running |
|---|
| 236 |
application. Each of these methods gives a familiar 2D widget set that |
|---|
| 237 |
can control applications flexibly. To provide this capability, it uses |
|---|
| 238 |
CORBA.</para> |
|---|
| 239 |
|
|---|
| 240 |
<para>The Java code in Tweek includes the Tweek Java API and the Tweek |
|---|
| 241 |
JavaBean loader application. The Java API is provided to make the use |
|---|
| 242 |
of JavaBeans and CORBA simpler for programmers. The JavaBean loader |
|---|
| 243 |
application simply loads the Beans it finds and presents them to the |
|---|
| 244 |
user in some sort of structured manner (for example, a collection of |
|---|
| 245 |
icons with web-style navigation).</para> |
|---|
| 246 |
</section> |
|---|
| 247 |
</section> |
|---|
| 248 |
|
|---|
| 249 |
<section> |
|---|
| 250 |
<title>VRJConfig</title> |
|---|
| 251 |
|
|---|
| 252 |
<para>VRJConfig is the configuration editor for VR Juggler. It is a |
|---|
| 253 |
complete rewrite of VjControl, both in terms of the user interface and |
|---|
| 254 |
the back-end code. The new interface is based on open discussion and |
|---|
| 255 |
feedback from users of VR Juggler 1.0 and VjControl.</para> |
|---|
| 256 |
|
|---|
| 257 |
<para>The back-end is much more extensible. It allows users to write |
|---|
| 258 |
plug-in editors to simplify complex editing tasks. User-defined |
|---|
| 259 |
configuration elements can be handled in a much more dynamic manner as |
|---|
| 260 |
well. No modification of VR Juggler or JCCL <quote>system</quote> files |
|---|
| 261 |
must be made to get user-defined elements into the editor.</para> |
|---|
| 262 |
|
|---|
| 263 |
<para>VRJConfig is itself a JavaBean that is loaded into the Tweek Java |
|---|
| 264 |
GUI. VRJConfig uses JavaBeans internally to facilitate user extensions. |
|---|
| 265 |
All in all, VRJConfig is a highly dynamic, powerful editor for VR |
|---|
| 266 |
Juggler configurations.</para> |
|---|
| 267 |
</section> |
|---|
| 268 |
</section> |
|---|
| 269 |
|
|---|
| 270 |
<section> |
|---|
| 271 |
<title>VR Juggler 2.0</title> |
|---|
| 272 |
|
|---|
| 273 |
<para>TODO... (this is the version number of the next release of Juggler)</para> |
|---|
| 274 |
</section> |
|---|
| 275 |
</article> |
|---|