from java.lang import Math from java.awt import BorderLayout from java.awt import GraphicsConfiguration from java.awt import Font from javax.media.j3d import Canvas3D from javax.media.j3d import BranchGroup from javax.media.j3d import Transform3D from javax.media.j3d import TransformGroup from javax.media.j3d import Appearance from javax.media.j3d import Material from javax.media.j3d import Font3D from javax.media.j3d import FontExtrusion from javax.media.j3d import Text3D from javax.media.j3d import Shape3D from javax.media.j3d import DirectionalLight from javax.media.j3d import RotationInterpolator from javax.media.j3d import Alpha from javax.media.j3d import BoundingSphere from javax.swing import JFrame from javax.vecmath import Vector3f from javax.vecmath import Color3f from com.sun.j3d.utils.universe import SimpleUniverse class HelloFrame(JFrame): def __init__(self, title ): self.setTitle(title) self.setSize(640, 480) self.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ) canvas3D = self.createCanvas3D() scene = self.createSceneGraph() self.connect(canvas3D, scene) def createCanvas3D(self): self.getContentPane().setLayout(BorderLayout()) config = SimpleUniverse.getPreferredConfiguration() canvas3D = Canvas3D(config) self.getContentPane().add(canvas3D) return canvas3D def createSceneGraph(self): objRoot = BranchGroup() mover = self.moveTextBack() spinner = self.createSpinner() rotator = RotationInterpolator(Alpha(-1, 4000), spinner, Transform3D(), 0.0, Math.PI * 2) rotator.setSchedulingBounds( BoundingSphere() ) spinner.addChild(rotator) objRoot.addChild(mover) mover.addChild(spinner) spinner.addChild(self.createTextShape()) self.setLighting(mover) return objRoot def createSpinner(self): spinner = TransformGroup() spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE) return spinner def moveTextBack(self): transform3D = Transform3D() transform3D.setTranslation(Vector3f(0.0, 0.0, -10.0)) return TransformGroup(transform3D) def createTextShape(self): textAppear = Appearance() textAppear.setMaterial(Material()) font3D = Font3D(Font("MS Pゴシック", Font.PLAIN, 1), FontExtrusion()) textGeom = Text3D(font3D, "Hello, Java 3D World!") textGeom.setAlignment(Text3D.ALIGN_CENTER) textShape = Shape3D() textShape.setGeometry(textGeom) textShape.setAppearance(textAppear) return textShape def setLighting(self,objMove): light = DirectionalLight() light.setInfluencingBounds(BoundingSphere()) light.setDirection(Vector3f(0.0,0.0,-1.0)) light.setColor(Color3f(1.0, 1.0, 1.0)) objMove.addChild(light) def connect(self,canvas3D, scene): universe = SimpleUniverse(canvas3D) universe.getViewingPlatform().setNominalViewingTransform() universe.addBranchGraph(scene) if __name__ == '__main__': frame = HelloFrame("Hello, World") frame.setVisible(True)