The TransformGroup node specifies a single spatial transformation-via
a Transform3D object -that can position, orient, and scale all of its children.
The specified transformation must be affine. Further, if the TransformGroup
node is used as an ancestor of a ViewPlatform node in the scene graph, then
the transformation must be congruent-only rotations, translations, and uniform
scales are allowed in a direct path from a Locale to a ViewPlatform node. A
BadTransformException is thrown if an attempt is made to specify an illegal
transform.
------------------------------------------------------------------------
Note: Even though arbitrary affine transformations are allowed, better performance
will result if all matrices within a branch graph are congruent-containing only
rotations, translation, and uniform scale.
------------------------------------------------------------------------
The effects of transformations in the scene graph are cumulative. The concatenation
of the transformations of each TransformGroup in a direct path from the Locale
to a Leaf node defines a composite model transformation (CMT) that takes points
in that Leaf node's local coordinates and transforms them into Virtual World
(Vworld) coordinates. This composite transformation is used to transform points,
normals, and distances into Vworld coordinates. Points are transformed by the
CMT. Normals are transformed by the inverse-transpose of the CMT. Distances
are transformed by the scale of the CMT. In the case of a transformation containing
a nonuniform scale or shear, the maximum scale value in any direction is used.
This ensures, for example, that a transformed bounding sphere, which is specified
as a point and a radius, continues to enclose all objects that are also transformed
using a nonuniform scale.