Archive for 11月 6th, 2012

  1. Hello, Java 3D World!

    Posted on 11月 6th, 2012 by cx20

    Java 3D

    Java 3D は Java による 3D グラフィックライブラリである。

    ソースコード

    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;
     
    public class Hello extends JFrame {
        public static void main(String[] args) {
            Hello frame = new Hello("Hello, World");
            frame.setVisible(true);
        }
     
        public Hello( String title ) {
            super(title);
            setSize(640, 480);
            setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
            Canvas3D canvas3D = createCanvas3D();
            BranchGroup scene = createSceneGraph();
            connect(canvas3D, scene);
        }
     
        private Canvas3D createCanvas3D() {
            getContentPane().setLayout(new BorderLayout());
            GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
            Canvas3D canvas3D = new Canvas3D(config);
            getContentPane().add(canvas3D);
            return canvas3D;
        }
     
        public BranchGroup createSceneGraph() {
            BranchGroup objRoot = new BranchGroup();
            TransformGroup mover = moveTextBack();
            TransformGroup spinner = createSpinner();
            RotationInterpolator 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;
        }
     
        private TransformGroup createSpinner() {
            TransformGroup spinner = new TransformGroup();
            spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
            return spinner;
        }
     
        private TransformGroup moveTextBack() {
            Transform3D transform3D = new Transform3D();
            transform3D.setTranslation(new Vector3f(0.0f, 0.0f, -10.0f));
            return new TransformGroup(transform3D);
        }
     
        private Shape3D createTextShape() {
            Appearance textAppear = new Appearance();
            textAppear.setMaterial(new Material());
            Font3D font3D = new Font3D(new Font("MS Pゴシック", Font.PLAIN, 1), new FontExtrusion());
            Text3D textGeom = new Text3D(font3D, new String("Hello, Java 3D World!"));
            textGeom.setAlignment(Text3D.ALIGN_CENTER);
            Shape3D textShape = new Shape3D();
            textShape.setGeometry(textGeom);
            textShape.setAppearance(textAppear);
            return textShape;
        }
     
        private void setLighting(TransformGroup objMove) {
            DirectionalLight 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);
        }
     
        private void connect(Canvas3D canvas3D, BranchGroup scene) {
            SimpleUniverse universe = new SimpleUniverse(canvas3D);
            universe.getViewingPlatform().setNominalViewingTransform();
            universe.addBranchGraph(scene);
        }
    }

    コンパイル&実行方法

    C:¥> javac Hello.java
    C:¥> javaw Hello

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 3D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+