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 object Hello { def main(args: Array[String]) { var frame = new HelloFrame("Hello, World") frame.setVisible(true) } } class HelloFrame( title: String ) extends JFrame { setTitle(title) setSize(640, 480) setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ) var canvas3D = createCanvas3D() var scene = createSceneGraph() connect(canvas3D, scene) def createCanvas3D(): Canvas3D = { getContentPane().setLayout(new BorderLayout()) var config = SimpleUniverse.getPreferredConfiguration() var canvas3D = new Canvas3D(config) getContentPane().add(canvas3D) return canvas3D } def createSceneGraph(): BranchGroup = { var objRoot = new BranchGroup() var mover = moveTextBack() var spinner = createSpinner() var rotator = new RotationInterpolator(new Alpha(-1, 4000), spinner, new Transform3D(), 0.0f, Math.Pi.toFloat * 2.0f) rotator.setSchedulingBounds( new BoundingSphere() ) spinner.addChild(rotator) objRoot.addChild(mover) mover.addChild(spinner) spinner.addChild( createTextShape()) setLighting(mover) return objRoot } def createSpinner(): TransformGroup = { var spinner = new TransformGroup() spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE) return spinner } def moveTextBack(): TransformGroup = { var transform3D = new Transform3D() transform3D.setTranslation(new Vector3f(0.0f, 0.0f, -10.0f)) return new TransformGroup(transform3D) } def createTextShape(): Shape3D = { var textAppear = new Appearance() textAppear.setMaterial(new Material()) var font3D = new Font3D(new Font("MS Pゴシック", Font.PLAIN, 1), new FontExtrusion()) var textGeom = new Text3D(font3D, new String("Hello, Java 3D World!")) textGeom.setAlignment(Text3D.ALIGN_CENTER) var textShape = new Shape3D() textShape.setGeometry(textGeom) textShape.setAppearance(textAppear) return textShape } def setLighting(objMove: TransformGroup) { var 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) } def connect(canvas3D: Canvas3D, scene: BranchGroup) { var universe = new SimpleUniverse(canvas3D) universe.getViewingPlatform().setNominalViewingTransform() universe.addBranchGraph(scene) } }