aboutsummaryrefslogtreecommitdiffstats
path: root/doc-files/VirtualUniverse.html
diff options
context:
space:
mode:
authorphil <[email protected]>2017-12-29 22:53:47 +1300
committerphil <[email protected]>2017-12-29 22:53:47 +1300
commit54f1415fa01061f0bcc5126605713b9a391cec46 (patch)
tree9f8a34f8219ca893878bc22e0fe14d2d57c5f436 /doc-files/VirtualUniverse.html
parentb682efa3d0936f68105fc017f7d0ae6dc96fd073 (diff)
Some excellent doc files added
Diffstat (limited to 'doc-files/VirtualUniverse.html')
-rw-r--r--doc-files/VirtualUniverse.html265
1 files changed, 265 insertions, 0 deletions
diff --git a/doc-files/VirtualUniverse.html b/doc-files/VirtualUniverse.html
new file mode 100644
index 0000000..2f9dd14
--- /dev/null
+++ b/doc-files/VirtualUniverse.html
@@ -0,0 +1,265 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+ <meta content="text/html; charset=ISO-8859-1"
+ http-equiv="content-type">
+ <title>Java 3D API - Scene Graph Superstructure</title>
+</head>
+<body>
+<h2>Scene Graph Superstructure</h2>
+<p>Java 3D's superstructure consists of one or more
+VirtualUniverse objects, each of which contains a set of one or more
+high-resolution Locale objects. The Locale objects, in turn, contain
+collections of subgraphs that comprise the scene graph (see <a
+ href="#Figure_1">Figure
+1</a>).
+</p>
+<p>
+</p>
+<h2>The Virtual Universe</h2>
+Java 3D defines the concept of a <em>virtual universe</em>
+as a three-dimensional space with an associated set of objects. Virtual
+universes serve as the largest unit of aggregate representation, and
+can also be thought of as databases. Virtual universes can be very
+large, both in physical space units and in content. Indeed, in most
+cases a single virtual universe will serve an application's entire
+needs.
+<p>Virtual universes are separate entities in that no node object may
+exist in more than one virtual universe at any one time. Likewise, the
+objects in one virtual universe are not visible in, nor do they
+interact with objects in, any other virtual universe.
+</p>
+<p>To support large virtual universes, Java 3D introduces the concept
+of Locales that have <em>high-resolution coordinates</em>
+as an origin. Think of high-resolution coordinates as "tie-downs" that
+precisely anchor the locations of objects specified using less precise
+floating-point coordinates that are within the range of influence of
+the high-resolution coordinates.
+</p>
+<p>A Locale, with its associated high-resolution coordinates, serves as
+the next level of representation down from a virtual universe. All
+virtual universes contain one or more high-resolution-coordinate
+Locales, and all other objects are attached to a Locale.
+High-resolution coordinates act as an upper-level translation-only
+transform node. For example, the coordinates of all objects that are
+attached to a particular Locale are all relative to the location of
+that Locale's high-resolution coordinates.
+</p>
+<p><a name="Figure_1"></a><img style="width: 500px; height: 340px;"
+ alt="The Virtual Universe" title="The Virtual Universe"
+ src="VirtualUniverse.gif">
+</p>
+<p>
+</p>
+<ul>
+ <font size="-1"><b><i>Figure 1</i> &#8211; The Virtual Universe</b></font>
+</ul>
+<p>
+While a virtual universe is similar to the traditional computer
+graphics concept of a scene graph, a given virtual universe can become
+so large that it is often better to think of a scene graph as the
+descendant of a high-resolution-coordinate Locale.
+</p>
+<p>
+</p>
+<h2>Establishing a Scene</h2>
+To construct a three-dimensional scene, the programmer must execute a
+Java 3D program. The Java 3D application must first create a
+VirtualUniverse object and attach at least one Locale to it. Then the
+desired scene graph is constructed, starting with a BranchGroup node
+and including at least one ViewPlatform object, and the scene graph is
+attached to the Locale. Finally, a View object that references the
+ViewPlatform object (see "<a href="intro.html#Structuring">Structuring
+the Java 3D Program</a>")
+is constructed. As soon as a scene graph containing a ViewPlatform is
+attached to the VirtualUniverse, Java 3D's rendering loop is engaged,
+and the scene will appear on the drawing canvas(es) associated with the
+View object.
+<h2>Loading a Virtual Universe</h2>
+Java 3D is a runtime application programming
+interface (API), not a file format. As an API, Java 3D provides no
+direct mechanism for loading or storing a virtual universe.
+Constructing a scene graph involves the execution of a Java 3D program.
+However, loaders to convert a number of standard 3D file formats to or
+from Java 3D virtual universes are expected to be generally available.
+<h2>Coordinate Systems</h2>
+By default, Java 3D coordinate systems are right-handed, with the
+orientation semantics being that +<em>y</em> is the local gravitational
+up, +<em>x</em> is horizontal to the right, and +<em>z</em> is directly
+toward the viewer. The default units are meters.
+<h2>High-Resolution Coordinates</h2>
+Double-precision floating-point, single-precision floating-point, or
+even fixed-point representations of three-dimensional coordinates are
+sufficient to represent and display rich 3D scenes. Unfortunately,
+scenes are not worlds, let alone universes. If one ventures even a
+hundred miles away from the (0.0, 0.0, 0.0) origin using only
+single-precision floating-point coordinates, representable points
+become quite quantized, to at very best a third of an inch (and much
+more coarsely than that in practice).
+<p>To "shrink" down to a small size (say the size of an IC transistor),
+even very near (0.0, 0.0, 0.0), the same problem arises.
+</p>
+<p>If a large contiguous virtual universe is to be supported, some form
+of
+higher-resolution addressing is required. Thus the choice of 256-bit
+positional components for "high-resolution" positions.
+</p>
+<p>
+</p>
+<h3>Java 3D High-Resolution
+Coordinates</h3>
+Java 3D high-resolution coordinates consist of three 256-bit
+fixed-point numbers, one each for <em>x</em>, <em>y</em>, and <em>z</em>.
+The fixed point is at bit 128, and the value 1.0 is defined to be
+exactly 1 meter. This coordinate system is sufficient to describe a
+universe in excess of several hundred billion light years across, yet
+still define objects smaller than a proton (down to below the planck
+length). <a href="#Table_1">Table
+1</a> shows how many bits are needed above or below the fixed point
+to represent the range of interesting physical dimensions.
+<p><a name="Table_1"></a>
+<table bordercolorlight="#FFFFFF" bordercolordark="#000000" border="1"
+ cellpadding="5" cellspacing="0">
+ <caption><font size="-1"><b> <i>Table 1</i> &#8211;
+Java 3D High-Resolution Coordinates </b></font></caption><tbody>
+ <tr bgcolor="#cccccc" valign="top">
+ <th><font color="#003366" size="-1">2<sup>n</sup> Meters </font></th>
+ <th><font color="#003366" size="-1">Units </font></th>
+ </tr>
+ <tr valign="top">
+ <td> 87.29</td>
+ <td>Universe (20 billion light years)&nbsp; <br>
+ </td>
+ </tr>
+ <tr valign="top">
+ <td> 69.68</td>
+ <td>Galaxy (100,000 light years) </td>
+ </tr>
+ <tr valign="top">
+ <td> 53.07</td>
+ <td>Light year </td>
+ </tr>
+ <tr valign="top">
+ <td> 43.43</td>
+ <td>Solar system diameter </td>
+ </tr>
+ <tr valign="top">
+ <td> 23.60</td>
+ <td>Earth diameter </td>
+ </tr>
+ <tr valign="top">
+ <td> 10.65</td>
+ <td>Mile </td>
+ </tr>
+ <tr valign="top">
+ <td> 9.97</td>
+ <td>Kilometer </td>
+ </tr>
+ <tr valign="top">
+ <td> 0.00</td>
+ <td>Meter </td>
+ </tr>
+ <tr valign="top">
+ <td> -19.93</td>
+ <td>Micron </td>
+ </tr>
+ <tr valign="top">
+ <td> -33.22</td>
+ <td>Angstrom </td>
+ </tr>
+ <tr valign="top">
+ <td> -115.57</td>
+ <td>Planck length </td>
+ </tr>
+ </tbody>
+</table>
+</p>
+<p>A 256-bit fixed-point number also has the advantage of being able to
+directly represent nearly any reasonable single-precision
+floating-point value <em>exactly</em>.
+</p>
+<p>High-resolution coordinates in Java 3D are used only to embed more
+traditional floating point coordinate systems within a much
+higher-resolution substrate. In this way a visually seamless virtual
+universe of any conceivable size or scale can be created, without worry
+about numerical accuracy.
+</p>
+<p>
+</p>
+<h3>Java 3D Virtual World
+Coordinates</h3>
+Within a given virtual world coordinate system, positions are expressed
+by three floating point numbers. The virtual world coordinate scale is
+in meters, but this can be affected by scale changes in the object
+hierarchy.
+<h3>Details of High-Resolution
+Coordinates</h3>
+High-resolution coordinates are represented as signed,
+two's-complement, fixed-point numbers consisting of 256 bits. Although
+Java 3D keeps the internal representation of high-resolution
+coordinates opaque, users specify such coordinates using 8-element
+integer arrays. Java 3D treats the integer found at index 0 as
+containing the most significant bits and the integer found at index 7
+as containing the least significant bits of the high-resolution
+coordinate. The binary point is located at bit position 128, or between
+the integers at index 3 and 4. A high-resolution coordinate of 1.0 is 1
+meter.
+<p>The semantics of how file loaders deal with high-resolution
+coordinates
+is up to the individual file loader, as Java 3D does not directly
+define any file-loading semantics. However, some general advice can be
+given (note that this advice is <em>not</em> officially part of the
+Java 3D specification).
+</p>
+<p>For "small" virtual universes (on the order of hundreds of meters
+across in relative scale), a single Locale with high-resolution
+coordinates at location (0.0, 0.0, 0.0) as the root node (below the
+VirtualUniverse object) is sufficient; a loader can automatically
+construct this node during the loading process, and the point in
+high-resolution coordinates does not need any direct representation in
+the external file.
+</p>
+<p>Larger virtual universes are expected to be constructed usually like
+computer directory hierarchies, that is, as a "root" virtual universe
+containing mostly external file references to embedded virtual
+universes. In this case, the file reference object (user-specific data
+hung off a Java 3D group or hi-res node) defines the location for the
+data to be read into the current virtual universe.
+</p>
+<p>The data file's contents should be parented to the file object node
+while being read, thus inheriting the high-resolution coordinates of
+the file object as the new relative virtual universe origin of the
+embedded scene graph. If this scene graph itself contains
+high-resolution coordinates, it will need to be offset (translated) by
+the amount in the file object's high-resolution coordinates and then
+added to the larger virtual universe as new high-resolution
+coordinates, with their contents hung off below them. Once again, this
+procedure is not part of the official Java 3D specification, but some
+more details on the care and use of high-resolution coordinates in
+external file formats will probably be available as a Java 3D
+application note.
+</p>
+<p>Authoring tools that directly support high-resolution coordinates
+should create additional high-resolution coordinates as a user creates
+new geometry "sufficiently" far away (or of different scale) from
+existing high-resolution coordinates.
+</p>
+<p><strong>Semantics of widely moving objects</strong>. Most fixed and
+nearly-fixed objects stay attached to the same high-resolution Locale.
+Objects that make wide changes in position or scale may periodically
+need to be reparented to a more appropriate high-resolution Locale. If
+no appropriate high-resolution Locale exists, the application may need
+to create a new one.
+</p>
+<p><strong>Semantics of viewing</strong>. The ViewPlatform object and
+the
+associated nodes in its hierarchy are very often widely moving objects.
+Applications will typically attach the view platform to the most
+appropriate high-resolution Locale. For display, all objects will first
+have their positions translated by the difference between the location
+of their high-resolution Locale and the view platform's high-resolution
+Locale. (In the common case of the Locales being the same, no
+translation is necessary.)
+</p>
+</body>
+</html>