import javax.media.j3d.* 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 com.sun.j3d.utils.universe.SimpleUniverse class Hello extends JFrame { static void main(args) { def frame = new Hello("Hello, World") frame.setVisible(true) } Hello( title ) { super(title) setSize(640, 480) setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ) def canvas3D = createCanvas3D() BranchGroup scene = createSceneGraph() connect(canvas3D, scene) } Canvas3D createCanvas3D() { getContentPane().setLayout(new BorderLayout()) GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration() def canvas3D = new Canvas3D(config) getContentPane().add(canvas3D) return canvas3D } BranchGroup createSceneGraph() { def objRoot = new BranchGroup() def mover = moveTextBack() def spinner = createSpinner() def rotator = new RotationInterpolator(new Alpha(-1, 4000), spinner, new Transform3D(), 0.0f, (float)Math.PI * 2) rotator.setSchedulingBounds( new BoundingSphere() ) spinner.addChild(rotator) objRoot.addChild(mover) mover.addChild(spinner) spinner.addChild( createTextShape()) setLighting(mover) return objRoot } TransformGroup createSpinner() { def spinner = new TransformGroup() spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE) return spinner } TransformGroup moveTextBack() { def transform3D = new Transform3D() transform3D.setTranslation(new Vector3f(0.0f, 0.0f, -10.0f)) return new TransformGroup(transform3D) } Shape3D createTextShape() { def textAppear = new Appearance() textAppear.setMaterial(new Material()) def font3D = new Font3D(new Font("MS Pゴシック", Font.PLAIN, 1), new FontExtrusion()) def textGeom = new Text3D(font3D, new String("Hello, Java 3D World!")) textGeom.setAlignment(Text3D.ALIGN_CENTER) def textShape = new Shape3D() textShape.setGeometry(textGeom) textShape.setAppearance(textAppear) return textShape } void setLighting(objMove) { def light = new DirectionalLight() light.setInfluencingBounds(new BoundingSphere()) light.setDirection(new Vector3f(0.0f,0.0f,-1.0f)) light.setColor(new Color3f(1.0f, 1.0f, 1.0f)) objMove.addChild(light) } void connect(canvas3D, scene) { def universe = new SimpleUniverse(canvas3D) universe.getViewingPlatform().setNominalViewingTransform() universe.addBranchGraph(scene) } }