import scala.swing._ import javax.media.j3d._ import javax.vecmath._ import com.sun.j3d.utils.universe._ import com.sun.j3d.utils.geometry.ColorCube @SuppressWarnings(Array("serial")) object Sample3D { def createSceneGraph() :BranchGroup = { val objRoot = new BranchGroup(); val objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(objTrans); val axis = new Transform3D(); axis.rotZ(Math.Pi / 2); val bounds = new BoundingSphere(new Point3d(), 100.0); var rotator = new RotationInterpolator( new Alpha(-1,20 * 4000) , objTrans , axis , 0.0F , (Math.Pi * 2.0).toFloat); rotator.setSchedulingBounds(bounds); objRoot.addChild(rotator); val objTrans2 = new TransformGroup(); objTrans2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTrans.addChild(objTrans2); rotator = new RotationInterpolator(new Alpha(-1, 4000), objTrans2); rotator.setSchedulingBounds(bounds); objRoot.addChild(rotator); objTrans2.addChild(new ColorCube(0.4)); objRoot.compile(); return objRoot; } } object Main extends SimpleGUIApplication { val config = SimpleUniverse.getPreferredConfiguration(); val canvas = new Canvas3D(config); //create frame window def top=new MainFrame{ peer.setBounds(10, 10, 480, 480) //caption title = "Sample3D with Scala/Java3D" val contentPane = peer.getContentPane() contentPane.setLayout(new java.awt.BorderLayout()); contentPane.add(canvas,java.awt.BorderLayout.CENTER) } // end of MainFrame val scene = Sample3D.createSceneGraph(); val universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); universe.addBranchGraph(scene); }