  import java.applet.Applet;
  import java.awt.BorderLayout;
  import java.awt.Frame;
  import java.awt.event.*;
  import com.sun.j3d.utils.applet.MainFrame;
  import com.sun.j3d.utils.universe.*;
  import com.sun.j3d.utils.geometry.ColorCube;
  import javax.media.j3d.*;
  import javax.vecmath.*; 


public class HelloJava3Da extends Applet {
 public HelloJava3Da() {
 setLayout(new BorderLayout());
 //GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
 Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
 add("Center", canvas3D);
 BranchGroup scene = createSceneGraph();
 scene.compile();

 // SimpleUniverse is a Convenience Utility class
  SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
 
  // This moves the ViewPlatform back a bit so the
  // objects in the scene can be viewed.
  simpleU.getViewingPlatform().setNominalViewingTransform();
 
   simpleU.addBranchGraph(scene);
  } // end of HelloJava3Da (constructor)
 
  public BranchGroup createSceneGraph() {
  // Create the root of the branch graph
  BranchGroup objRoot = new BranchGroup();
  
  // Create a simple shape leaf node, add it to the scene graph.
  // ColorCube is a Convenience Utility class
  ColorCube cb1 = new ColorCube(0.4);
  ColorCube cb2 = new ColorCube(0.2);
  Transform3D translate1 = new Transform3D();
  translate1.set(new Vector3f(0.0f, 3.0f, 0.0f));
  TransformGroup t1 = new TransformGroup(translate1);
  objRoot.addChild(t1);
  t1.addChild(cb1);

  Transform3D translate2 = new Transform3D();
  translate2.set(new Vector3f(0.0f, -0.1f, 0.0f));
  TransformGroup t2 = new TransformGroup(translate2);
  objRoot.addChild(t2);
  t2.addChild(cb2);
  
  return objRoot;
  } // end of createSceneGraph method of HelloJava3Da
 
  public static void main(String[] args) {
  Frame frame = new MainFrame(new HelloJava3Da(), 256, 256);
  } // end of main (method of HelloJava3Da)
  } // end of class HelloJava3Da