aboutsummaryrefslogtreecommitdiffstats
path: root/doc-files/SceneGraphOverview.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc-files/SceneGraphOverview.html')
-rw-r--r--doc-files/SceneGraphOverview.html226
1 files changed, 226 insertions, 0 deletions
diff --git a/doc-files/SceneGraphOverview.html b/doc-files/SceneGraphOverview.html
new file mode 100644
index 0000000..f1616df
--- /dev/null
+++ b/doc-files/SceneGraphOverview.html
@@ -0,0 +1,226 @@
+<!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 Overview</title>
+</head>
+<body>
+<h2>Scene Graph Basics</h2>
+<p>A scene graph consists of Java 3D
+objects, called <em>nodes</em>,
+arranged in a tree structure. The user creates one or more scene
+subgraphs and attaches them to a virtual universe. The individual
+connections between Java 3D nodes always represent a directed
+relationship: parent to child. Java 3D restricts scene graphs in one
+major way: Scene graphs may not contain cycles. Thus, a Java 3D scene
+graph is a directed acyclic graph (DAG). See <a href="#Figure_1">Figure
+1</a>.
+</p>
+<p>Java 3D refines the <a href="../Node.html">Node</a> object class
+into two subclasses: <a href="../Group.html">Group</a>
+and
+<a href="../Leaf.html">Leaf</a> node objects. Group node objects group
+together one or more child
+nodes. A group node can point to zero or more children but can have
+only one parent. The SharedGroup node cannot have any parents (although
+it allows sharing portions of a scene graph, as described in "<a
+ href="SceneGraphSharing.html">Reusing Scene Graphs</a>").
+Leaf node objects contain the actual definitions of shapes (geometry),
+lights, fog, sounds, and so forth. A leaf node has no children and only
+one parent. The semantics of the various group and leaf nodes are
+described in subsequent chapters. </p>
+<h2>Scene Graph Structure</h2>
+<p>A scene graph organizes and controls the rendering
+of its constituent objects. The Java 3D renderer draws a scene graph in
+a consistent way that allows for concurrence. The Java 3D renderer can
+draw one object independently of other objects. Java 3D can allow such
+independence because its scene graphs have a particular form and cannot
+share state among branches of a tree.
+</p>
+<h3>Spatial Separation</h3>
+<p>The hierarchy of the scene graph encourages a natural spatial
+grouping
+on the geometric objects found at the leaves of the graph. Internal
+nodes act to group their children together. A group node also defines a
+spatial bound that contains all the geometry defined by its
+descendants. Spatial grouping allows for efficient implementation of
+operations such as proximity detection, collision detection, view
+frustum culling, and occlusion culling.
+</p>
+<p><a name="Figure_1"></a><img style="width: 500px; height: 341px;"
+ alt="Directed Acyclic Graph" title="Directed Acyclic Graph"
+ src="DAG.gif"></p>
+<p> </p>
+<ul>
+ <font size="-1"><b><i>Figure 1</i> &#8211; A Java
+3D Scene Graph Is a DAG
+(Directed Acyclic Graph)</b></font>
+</ul>
+<p> </p>
+<h3>State Inheritance</h3>
+<p>A leaf node's state is defined by the nodes in a direct path between
+the scene graph's root and the leaf. Because a leaf's graphics context
+relies only on a linear path between the root and that node, the Java
+3D renderer can decide to traverse the scene graph in whatever order it
+wishes. It can traverse the scene graph from left to right and top to
+bottom, in level order from right to left, or even in parallel. The
+only exceptions to this rule are spatially bounded attributes such as
+lights and fog.
+</p>
+<p>This characteristic is in marked contrast to many older scene
+graph-based APIs (including PHIGS and SGI's Inventor) where, if a node
+above or to the left of a node changes the graphics state, the change
+affects the graphics state of all nodes below it or to its right. </p>
+<p>The most common node object, along the path from the root to the
+leaf,
+that changes the graphics state is the TransformGroup object. The
+TransformGroup object can change the position, orientation, and scale
+of the objects below it. </p>
+<p>Most graphics state attributes are set by a Shape3D leaf node
+through
+its constituent Appearance object, thus allowing parallel rendering.
+The Shape3D node also has a constituent Geometry object that specifies
+its geometry-this permits different shape objects to share common
+geometry without sharing material attributes (or vice versa). </p>
+<p> </p>
+<h3>Rendering</h3>
+<p>The Java 3D renderer incorporates all graphics state changes made in
+a
+direct path from a scene graph root to a leaf object in the drawing of
+that leaf object. Java 3D provides this semantic for both retained and
+compiled-retained modes.
+</p>
+<p> </p>
+<h2>Scene Graph Objects</h2>
+<p>A Java 3D scene graph consists of a collection of Java 3D node
+objects
+connected in a tree structure. These node objects reference other scene
+graph objects called <em>node component objects</em>.
+All scene graph node and component objects are subclasses of a common
+<a href="../SceneGraphObject.html">SceneGraphObject</a> class. The
+SceneGraphObject class is an abstract class
+that defines methods that are common among nodes and component objects.
+</p>
+<p>Scene graph objects are constructed by creating a new instance of
+the
+desired class and are accessed and manipulated using the object's <code>set</code>
+and <code>get</code>
+methods. Once a scene graph object is created and connected to other
+scene graph objects to form a subgraph, the entire subgraph can be
+attached to a virtual universe---via a high-resolution <a
+ href="../Locale.html">Locale</a>
+object-making the object <em>live</em>. Prior to attaching a subgraph
+to a virtual
+universe, the entire subgraph can be <em>compiled</em> into an
+optimized, internal format (see the
+<code><a href="../BranchGroup.html#compile%28%29">BranchGroup.compile()</a></code>
+method). </p>
+<p>An important characteristic of all scene graph objects is that
+they can
+be accessed or modified only during the creation of a scene graph,
+except where explicitly allowed. Access to most <code>set</code> and <code>get</code>
+methods of objects that are part of a live or compiled scene graph is
+restricted. Such restrictions provide the scene graph compiler with
+usage information it can use in optimally compiling or rendering a
+scene graph. Each object has a set of capability bits that enable
+certain functionality when the object is live or compiled. By default,
+all capability bits are disabled (cleared). Only those <code>set</code>
+and <code>get</code>
+methods corresponding to capability bits that are explicitly enabled
+(set) prior to the object being compiled or made live are legal.<br>
+</p>
+<p> </p>
+<h2>Scene Graph Superstructure
+Objects</h2>
+Java 3D defines two scene graph superstructure objects,
+<a href="../VirtualUniverse.html">VirtualUniverse</a>
+and <a href="../Locale.html">Locale</a>, which are used to contain
+collections of subgraphs that
+comprise the scene graph. These objects are described in more detail in
+"<a href="VirtualUniverse.html">Scene Graph Superstructure</a>."
+<p> </p>
+<h3>VirtualUniverse Object</h3>
+A <a href="../VirtualUniverse.html">VirtualUniverse</a> object
+consists of a list of Locale objects that
+contain a collection of scene graph nodes that exist in the universe.
+Typically, an application will need only one VirtualUniverse, even for
+very large virtual databases. Operations on a VirtualUniverse include
+enumerating the Locale objects contained within the universe.
+<p> </p>
+<h3>Locale Object</h3>
+The <a href="../Locale.html">Locale</a> object acts as a container for
+a collection of subgraphs of
+the scene graph that are rooted by a BranchGroup node. A Locale also
+defines a location within the virtual universe using high-resolution
+coordinates (HiResCoord) to specify its position. The HiResCoord serves
+as the origin for all scene graph objects contained within the Locale.
+<p>A Locale has no parent in the scene graph but is implicitly
+attached to
+a virtual universe when it is constructed. A Locale may reference an
+arbitrary number of BranchGroup nodes but has no explicit children. </p>
+<p>The coordinates of all scene graph objects are relative to the
+HiResCoord of the Locale in which they are contained. Operations on a
+Locale include setting or getting the HiResCoord of the Locale, adding
+a subgraph, and removing a subgraph. </p>
+<p> </p>
+<h2>Scene Graph Viewing Objects</h2>
+Java 3D defines five scene graph viewing objects that are not part of
+the scene graph per se but serve to define the viewing parameters and
+to provide hooks into the physical world. These objects are <a
+ href="../Canvas3D.html">Canvas3D</a>,
+<a href="../Screen3D.html">Screen3D</a>, <a href="../View.html">View</a>,
+<a href="../PhysicalBody.html">PhysicalBody</a>, and <a
+ href="../PhysicalEnvironment.html">PhysicalEnvironment</a>. They are
+described in more detail in the "<a href="ViewModel.html">View Model</a>"
+document.<br>
+<p> </p>
+<h3>Canvas3D Object</h3>
+The <a href="../Canvas3D.html">Canvas3D</a> object encapsulates all of
+the parameters associated with
+the window being rendered into.
+When a Canvas3D object is attached to a View object, the Java 3D
+traverser renders the specified view onto the canvas. Multiple Canvas3D
+objects can point to the same View object.
+<p> </p>
+<h3>Screen3D Object</h3>
+The <a href="../Screen3D.html">Screen3D</a> object encapsulates all of
+the
+parameters associated with the physical screen containing the canvas,
+such as the width and height of the screen in pixels, the physical
+dimensions of the screen, and various physical calibration values.
+<p> </p>
+<h3>View Object</h3>
+The <a href="../View.html">View</a> object specifies information
+needed to render the scene graph.
+<a href="#Figure_2">Figure
+2</a> shows a View object attached to a simple scene graph for
+viewing the scene.
+<p>The View object is the central Java 3D object for coordinating all
+aspects of viewing.
+All viewing parameters in Java 3D are directly contained either within
+the View object or within objects pointed to by a View object. Java 3D
+supports multiple simultaneously active View objects, each of which can
+render to one or more canvases. </p>
+<p> </p>
+<h3>PhysicalBody Object</h3>
+The PhysicalBody object encapsulates all of the
+parameters associated with the physical body, such as head position,
+right and left eye position, and so forth.
+<p> </p>
+<h3>PhysicalEnvironment Object</h3>
+<p>The PhysicalEnvironment object encapsulates all of the parameters
+associated with the physical environment, such as calibration
+information for the tracker base for the head or hand tracker.<br>
+</p>
+<p><a name="Figure_2"></a><br>
+</p>
+<p><img style="width: 489px; height: 339px;" alt="Viewing a Scene Graph"
+ title="Viewing a Scene Graph" src="ViewBranch.gif">
+</p>
+<p> </p>
+<ul>
+ <font size="-1"><b><i>Figure 2</i> &#8211; Viewing a Scene Graph</b></font>
+</ul>
+</body>
+</html>