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!                     |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
|                                          |
+------------------------------------------+

Tags:

Categories: Java, Java 3D

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

WP-SpamFree by Pole Position Marketing