import com.sun.j3d.utils.universe.SimpleUniverse; import javax.media.j3d.BranchGroup; import javax.media.j3d.Transform3D; import javax.media.j3d.TransformGroup; import javax.media.j3d.Canvas3D; import javax.media.j3d.Alpha; import javax.media.j3d.RotationInterpolator; import javax.media.j3d.BoundingSphere; import javax.media.j3d.Appearance; import javax.media.j3d.Material; import javax.media.j3d.Font3D; import javax.media.j3d.FontExtrusion; import javax.media.j3d.Text3D; import javax.media.j3d.Shape3D; import javax.media.j3d.DirectionalLight; import javax.swing.JFrame; import javax.vecmath.Vector3f; import javax.vecmath.Color3f; import java.awt.BorderLayout; import java.awt.GraphicsConfiguration; import java.awt.Font; import java.applet.Applet; public class HelloWorld extends JFrame { private Transform3D rotate1 = new Transform3D(); private Transform3D rotate2 = new Transform3D(); public HelloWorld() { super("Silabsoft"); Canvas3D canvas3D = createCanvas3D(); BranchGroup scene = createSceneGraph(); connect(canvas3D, scene); } private Canvas3D createCanvas3D() { setSize(300, 300); getContentPane().setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas3D = new Canvas3D(config); setSize(300, 300); getContentPane().add(canvas3D); return canvas3D; } public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); TransformGroup mover = moveTextBack(); TransformGroup spinner = createSpinner(); objRoot.addChild(mover); mover.addChild(spinner); spinner.addChild( createTextShape()); spinner.addChild(makeSpin(spinner)); setLighting(mover); return objRoot; } private TransformGroup createSpinner() { TransformGroup spinner = new TransformGroup(); spinner.setCapability(TransformGroup. ALLOW_TRANSFORM_WRITE); return spinner; } private TransformGroup moveTextBack() { Transform3D transform3D = new Transform3D(); transform3D.setTranslation( new Vector3f(0.0f, 0.0f, -5.0f)); return new TransformGroup(transform3D); } private Shape3D createTextShape() { Appearance textAppear = new Appearance(); textAppear.setMaterial(new Material()); Font3D font3D = new Font3D( new Font("Helvetica", Font.PLAIN, 1), new FontExtrusion()); Text3D textGeom = new Text3D(font3D, new String("Silabsoft")); textGeom.setAlignment(Text3D.ALIGN_CENTER); Shape3D textShape = new Shape3D(); textShape.setGeometry(textGeom); textShape.setAppearance(textAppear); return textShape; } private void setLighting( TransformGroup objMove) { DirectionalLight light = new DirectionalLight(); light.setInfluencingBounds( new BoundingSphere()); light.setDirection( new Vector3f(0.0f,2.0f,-1.0f)); light.setColor(new Color3f( 0.0f, 1.0f, 1.0f)); objMove.addChild(light); } private RotationInterpolator makeSpin( TransformGroup spinner) { RotationInterpolator rotator = new RotationInterpolator( new Alpha(-1, 3000), spinner); rotator.setTransformAxis(rotateCube()); BoundingSphere bounds = new BoundingSphere(); rotator.setSchedulingBounds(bounds); return rotator; } private Transform3D rotateCube() { rotate1.rotX(Math.PI / 4.0d); rotate2.rotY(Math.PI / 3.0d); rotate1.mul(rotate2); return rotate1; } private void connect(Canvas3D canvas3D, BranchGroup scene) { SimpleUniverse simpleU = new SimpleUniverse(canvas3D); simpleU.getViewingPlatform(). setNominalViewingTransform(); simpleU.addBranchGraph(scene); } public static void main(String[] args) { new HelloWorld().setVisible(true); } public static void init() { new HelloWorld().setVisible(true); } }