Each tree limb is represented by a
TreeLimb object, which internally builds a subgraph such as the one in Figure 28-4.
Figure 28-4. The TreeLimb subgraph
Several of the
TransformGroup nodes (those with "TG" in their name) are used to support translation, rotation, and scaling effects, leaving the basic geometry (a cylinder) unaffected. This means that I could avoid using the complicated
startBG BranchGroup is linked to a parent limb via the parent's
endLimbTG node. Since the link is made at execution time, Java 3D requires the use of a
orientTG holds the orientation of the limb (its initial axis of rotation and angle to that axis). Once set, this cannot change during execution. This restriction is in place to simplify the class's implementation.
scaleTG manages the scaling of the x-, y-, and z-dimensions of the cylinder. The x- and z-values are kept the same (they represent the radius); the y-axis is for the length.
The center point for Java 3D's
Cylinder is its middle, but I want the origin to be its base at the place where the cylinder connects to the parent limb.
baseTG moves the cylinder up the y-axis by
2 to achieve it. The capabilities for the
Material node component are set so that its color can be adjusted at runtime.
Child limbs or leaves are attached to this limb through
endLimbTG. The transform ...