Class Hierarchy | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
The Group node object is a general-purpose grouping node.
Group nodes have exactly one parent and an arbitrary number of children that
are rendered in an unspecified order (or in parallel). Null children are allowed;
no operation is performed on a null child node. Operations on Group node objects
include adding, removing, and enumerating the children of the Group node. The
subclasses of Group node add additional semantics.
Method | Default |
---|---|
Group( ) | - |
void addChild( Node child ) Appends the specified child to this node's list of children. |
None |
void setChild( Node child, int index ) Replaces the node's specified child with the child provided. |
None |
void insertChild( Node child, int index ) Inserts the node's specified child at the specified index location. |
None |
getChild(int index) Returns the node's index selected child. |
None |
void removeChild( int index ) Removes the node's child at the specified index location. |
None |
The BranchGroup serves as a pointer to the root of a scene graph branch; BranchGroup objects are the only objects that can be inserted into a Locale's set of objects. A subgraph, rooted by a BranchGroup node can be thought of as a compile unit.
The following things may be done with BranchGroup:
Note that that if a BranchGroup is included in another subgraph, as a child of some other group node, it may not be attached to a Locale.
BranchGroup Class Methods | Default |
---|---|
BranchGroup( ) | - |
void compile( ) | None |
void detach( ) | None |
Locale locale = new Locale( universe );
Shape3D shape = new Shape3D( geom, app );
. . .
BranchGroup branch = new BranchGroup( );
branch.addChild( shape );
branch.compile( );
. . .
locale.addBranchGraph( branch );
The OrderedGroup node guarantees that Java 3D will render its children in their index order. Only the OrderedGroup node and its subclasses make any use of the order of their children during rendering.
Shape3D encompass = new Shape3D( geom, app );
Shape3D decal1 = new Shape3D( geom1, app1 );
Shape3D decal2 = new Shape3D( geom2, app2 );
. . .
DecalGroup decals = new DecalGroup( );
decals.addChild( encompass );
decals.addChild( decal1 );
decals.addChild( decal2 );
The DecalGroup node is a subclass of the OrderedGroup node. The DecalGroup node is an ordered group node used for defining decal geometry on top of other geometry. The DecalGroup node specifies that its children should be rendered in index order and that they generate coplanar objects. Examples include painted decals or text on surfaces and a checkerboard layered on top of a table.
The first child, at index 0, defines the surface on top of which all other children are rendered. The geometry of this child must encompass all other children; otherwise, incorrect rendering may result. The polygons contained within each of the children must be facing the same way. If the polygons defined by the first child are front facing, then all other surfaces should be front facing. In this case, the polygons are rendered in order. The renderer can use knowledge of the coplanar nature of the surfaces to avoid Z-buffer collisions. (If, for example, the underlying implementation supports stenciling or polygon offset, then these techniques may be employed.) If the main surface is back facing, then all other surfaces should be back facing and need not be rendered (even if back-face culling is disabled).
Note that using the DecalGroup node does not guarantee that Z-buffer collisions are avoided. An implementation of Java 3D may fall back to treating DecalGroup node as an ordinary OrderedGroup node.
The Switch group node allows a Java 3D application to choose dynamically among a number of subgraphs. The Switch node contains an ordered list of children and a switch value. The switch value determines which child or children Java 3D will render. Note that the index order of children is used only for selecting the appropriate child or children-it does not specify rendering order.
These values, when used in place of a nonnegative integer index value, indicate which children of the Switch node are selected for rendering. A value of CHILD_NONE indicates that no children are rendered. A value of CHILD_ALL indicates that all children are rendered, effectively making this Switch node operate as an ordinary Group node. A value of CHILD_MASK indicates that the childMask BitSet is used to select the children that are rendered.
public class BitSet
extends Object
implements Cloneable, Serializable
This class implements a vector of bits that grows as needed. Each component
of the bit set has a boolean value. The bits of a BitSet are indexed by nonnegative
integers. Individual indexed bits can be examined, set, or cleared. One BitSet
may be used to modify the contents of another BitSet through logical AND, logical
inclusive OR, and logical exclusive OR operations.
By default, all bits in the set initially have the value false.
Method | Default |
---|---|
Switch( ) | - |
void setWhichChild( int index ) | CHILD_NONE |
void setChildMask( BitSet mask ) | None |
Shape3D first = new Shape3D( geom1, app1 );
Shape3D second = new Shape3D( geom2, app2 );
Shape3D third = new Shape3D( geom3, app3 );
. . .
Switch group = new Switch( );
group.addChild( first );
group.addChild( second );
group.addChild( third );
. . .
setWhichChild(1);
Method | Default |
---|---|
SharedGroup( ) | - |
void compile( ) | None |
Method | Default |
Link( ) | - |
Link( SharedGroup group ) | - |
void setSharedGroup( SharedGroup group ) | None |
TransformGroup groupA = new TransformGroup( ); TransformGroup groupB = new TransformGroup( ); Shape3D shape1 = new Shape3D( geom1, app1 ); Shape3D shape2 = new Shape3D( geom2, app1 ); . . . SharedGroup shared = new SharedGroup( ); shared.addChild( shape1 ); shared.addChild( shape2 ); shared.compile( ); . . . Link linkA = new Link( shared ); Link linkB = new Link( shared ); . . . groupA.addChild( linkA ); groupB.addChild( linkB );
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.
Method | Default/possible values |
---|---|
public TransformGroup( ) | Identity |
public TransformGroup(Transform3D t1) | |
public void setTransform( Transform3D xform ) | Identity |
public void getTransform(Transform3D t1) | |
public final void setCapability(int bit) (from SceneGraphObject) | ALLOW_TRANSFORM_READ / ALLOW_TRANSFORM_WRITE |
public final boolean getCapability(int bit) |
Just stay with simple combination and you won't have any trouble
(ยง Homonym: sheer)
1. A machine that cuts sheet metal by passing a blade through it.
2. (Physics) A deformation of an object in which parallel planes remain parallel
but are shifted in a direction parallel to themselves; "the shear changed
the quadrilateral into a parallelogram."
|
= |
|
* |
|
A generalized transform object represented internally
as a 4x4 double-precision floating point matrix. The mathematical representation
is row major, as in traditional matrix mathematics. A Transform3D is used to
perform translations, rotations, and scaling and shear effects.
A transform has an associated type, and all type classification is left to the
Transform3D object. A transform will typically have multiple types, unless it
is a general, unclassifiable matrix, in which case it won't be assigned a type.
The Transform3D type is internally computed when the transform object is constructed
and updated any time it is modified. A matrix will typically have multiple types.
For example, the type associated with an identity matrix is the result of ORing
all of the types, except for ZERO and NEGATIVE_DETERMINANT, together. There
are public methods available to get the ORed type of the transformation, the
sign of the determinant, and the least general matrix type. The matrix type
flags are defined as follows:* ZERO - zero matrix. All of the elements in the
matrix have the value 0.
* IDENTITY - identity matrix. A matrix with ones on its main diagonal and zeros
every where else.
* SCALE - the matrix is a uniform scale matrix - there are no rotational or
translation components.
* ORTHOGONAL - the four row vectors that make up an orthogonal matrix form a
basis, meaning that they are mutually orthogonal. The scale is unity and there
are no translation components.
* RIGID - the upper 3 X 3 of the matrix is orthogonal, and there is a translation
component-the scale is unity.
* CONGRUENT - this is an angle- and length-preserving matrix, meaning that it
can translate, rotate, and reflect about an axis, and scale by an amount that
is uniform in all directions. These operations preserve the distance between
any two points, and the angle between any two intersecting lines.
* AFFINE - an affine matrix can translate, rotate, reflect, scale anisotropically,
and shear. Lines remain straight, and parallel lines remain parallel, but the
angle between intersecting lines can change.A matrix is also classified by the
sign of its determinant:NEGATIVE_DETERMINANT - this matrix has a negative determinant.
An orthogonal matrix with a positive determinant is a rotation matrix. An orthogonal
matrix with a negative determinant is a reflection and rotation matrix.The Java
3D model for 4 X 4 transformations is:
[ m00 m01 m02 m03 ] [ x ] [ x' ] [ m10 m11 m12 m13 ] . [ y ] = [ y' ] [ m20 m21 m22 m23 ] [ z ] [ z' ] [ m30 m31 m32 m33 ] [ w ] [ w' ] x' = m00 . x+m01 . y+m02 . z+m03 . w y' = m10 . x+m11 . y+m12 . z+m13 . w z' = m20 . x+m21 . y+m22 . z+m23 . w w' = m30 . x+m31 . y+m32 . z+m33 . w
Note: When transforming a Point3f or a Point3d, the input w is set to 1. When
transforming a Vector3f or Vector3d, the input w is set to 0.
Method |
---|
Transform3D( ) (Default : Identity) |
Transform3D( Matrix4d mat ) |
Transform3D( Matrix3d rot, Vector3d trans, double scale ) |
Transform3D(..... see the doc API ) |
void set( Matrix4d mat ) |
void set( Matrix3d rot, Vector3d trans, double scale ) |
public final void get(Matrix4d matrix) ..... VOID ! |
public final void mul(Transform3D t1) ..... this = this * t1 |
public final void mul(Transform3D t1, Transform3D t2) ..... this = t1*t2 |
Setting the transform to identity | void setIdentity( ) |
---|---|
Setting the transform to a translation | void set( Vector3d trans ) |
Setting the transform to a rotation | void rotX( double angle ) |
... rotY, rotZ | |
only about angle passing through the origin | void set( AxisAngle4d axang ) |
set( Matrix3d rot ) | |
Setting the transform to a scale factor (uniform or XYZ) | void set( double scale ) |
void setScale( Vector3d scale ) | |
Method
void setTranslation( Vector3d trans ) |
void setRotation( AxisAngle4d axang ) |
void setRotation( Matrix3d rot ) |
void setEuler( Vector3d rollPitchYaw ) |
void setScale( double scale ) |
AxisAngle4f(float x, float y, float z, float angle) |
Constructs and initializes a AxisAngle4f from the specified xyzw coordinates. |
AxisAngle4f(Vector3f axis, float angle) |
Constructs and initializes an AxisAngle4f from the specified axis and angle. |
Method |
---|
void transform( Point3d inout ) |
void transform( Point3d in, Point3d out ) |
void transform( Vector3d inout ) |
void transform( Vector3d in, Vector3d out ) |
Shape3D shape = new Shape3D( geom, app );
. . .
Transform3D transLeft = new Transform3D( );
transLeft.set( new Vector3d( -1.0, 0.0, 0.0 ) );
. . .
TransformGroup group = new TransformGroup( );
group.setTransform( transLeft );
group.addChild( shape );
rotateAngle = Math.PI/10.0;
rotateXPlus = new Transform3D();
rotateXPlus.rotX(rotateAngle);
tmpT = new Transform3D(rotateXPlus);
viewTransform.mul(tmp, viewTransform)
System.out.println("Rotation Plus X ");
System.out.println(viewTransform);
viewTransformGroup.setTransform(viewTransform);