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