package require java java::import java.awt.BorderLayout java::import java.awt.GraphicsConfiguration java::import java.awt.Font java::import javax.media.j3d.Canvas3D java::import javax.media.j3d.BranchGroup java::import javax.media.j3d.Transform3D java::import javax.media.j3d.TransformGroup java::import javax.media.j3d.Appearance java::import javax.media.j3d.Material java::import javax.media.j3d.Font3D java::import javax.media.j3d.FontExtrusion java::import javax.media.j3d.Text3D java::import javax.media.j3d.Shape3D java::import javax.media.j3d.DirectionalLight java::import javax.media.j3d.RotationInterpolator java::import javax.media.j3d.Alpha java::import javax.media.j3d.BoundingSphere java::import javax.swing.JFrame java::import javax.vecmath.Vector3f java::import javax.vecmath.Color3f java::import com.sun.j3d.utils.universe.SimpleUniverse proc createCanvas3D { frame } { $frame setLayout [java::new BorderLayout] set config [java::call SimpleUniverse getPreferredConfiguration] set canvas3D [java::new Canvas3D $config] $frame add $canvas3D return $canvas3D } proc createSceneGraph {} { set objRoot [java::new BranchGroup] set mover [moveTextBack] set spinner [createSpinner] set rotator [java::new RotationInterpolator [java::new Alpha -1 4000] $spinner [java::new Transform3D] 0.0 [expr [java::field Math PI] * 2]] $rotator setSchedulingBounds [java::new BoundingSphere] $spinner addChild $rotator $objRoot addChild $mover $mover addChild $spinner $spinner addChild [createTextShape] setLighting $mover return $objRoot } proc createSpinner {} { set spinner [java::new TransformGroup] $spinner setCapability [java::field TransformGroup ALLOW_TRANSFORM_WRITE] return $spinner } proc moveTextBack {} { set transform3D [java::new Transform3D] $transform3D setTranslation [java::new Vector3f 0.0 0.0 -10.0] return [java::new TransformGroup $transform3D] } proc createTextShape {} { set textAppear [java::new Appearance] $textAppear setMaterial [java::new Material] set font3D [java::new Font3D [java::new Font "MS Pゴシック" [java::field Font PLAIN] 1] [java::new FontExtrusion]] set textGeom [java::new Text3D $font3D [java::new String "Hello, Java 3D World!"]] $textGeom setAlignment [java::field Text3D ALIGN_CENTER] set textShape [java::new Shape3D] $textShape setGeometry $textGeom $textShape setAppearance $textAppear return $textShape } proc setLighting { objMove } { set light [java::new DirectionalLight] $light setInfluencingBounds [java::new BoundingSphere] $light setDirection [java::new Vector3f 0.0 0.0 -1.0] $light setColor [java::new Color3f 1.0 1.0 1.0] $objMove addChild $light } proc connect { canvas3D scene } { set universe [java::new SimpleUniverse $canvas3D] set view [$universe getViewingPlatform] [$universe getViewingPlatform] setNominalViewingTransform $universe addBranchGraph $scene } set frame [java::new JFrame] $frame setDefaultCloseOperation [java::field JFrame EXIT_ON_CLOSE] $frame setTitle "Hello, World" $frame setSize 640 480 set canvas3D [createCanvas3D $frame] set scene [createSceneGraph] connect $canvas3D $scene $frame setVisible true vwait done