Java3D Install & Earth


環境
OS X10.7.5
Eclipse Luna Release (4.4.0)

ダウンロードはこちらから
http://www.oracle.com/technetwork/java/javase/tech/index-jsp-138252.html


java3d-1_5_1-macosx.zipを展開
更に、j3d-jre.zipを展開
jarが３つあります。

![kobito.1419179203.439451.png](https://qiita-image-store.s3.amazonaws.com/0/33317/1acc1620-4d15-0870-3a33-24eeb5070e52.png "kobito.1419179203.439451.png")

Eclipseでのjar追加
参考
http://www.kenmiya.info/?p=221
要はjarにパスを通せということなんですね。
//引用開始
〈Java3D〉のパスを追加
作成したプロジェクトを選択し〘⌘+I〙か〘右クリック > properties〙をプロジェクトの環境設定画面を開きます。
〘Java Build Path > Libraries〙にある[Add External JARS…]をクリックします。そうすると、JARファイル選択ウィンドウが立ち上がるので④でインストールしたJARファイル

(【j3dcore.jar】【j3dutils.jar】【vecmath.jar】の3ファイル)を選択し[開く]ボタンをクリックします。
//引用終了

サンプルコード
参考
http://cx20.hatenablog.com/entry/2014/01/21/234122
ウィンドウサイズ、タイトルを変えましたが、ほぼ原文です。

```Java:My3d.java
//My3d.java
import java.awt.*;
import javax.swing.*;
import java.io.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.geometry.*;
import java.awt.GraphicsConfiguration;

public class My3d extends JFrame
{
    public static void main(String[] args)
    {
        My3d frame = new My3d("My3d");
        frame.setVisible(true);
    }

    public My3d( String title )
    {
        super(title);
        setSize(900,900);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Canvas3D canvas3D = createCanvas3D();
        BranchGroup scene = createScene();
        connect(canvas3D, scene);
    }
 
    private Canvas3D createCanvas3D() {
        getContentPane().setLayout(new BorderLayout());
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D canvas3D = new Canvas3D(config);
        getContentPane().add(canvas3D);
        return canvas3D;
    }
 
    private BranchGroup createScene()
    {
        BranchGroup objRoot = new BranchGroup();
        objRoot.setCapability(BranchGroup.ALLOW_DETACH);
        Bounds bounds = new BoundingSphere(new Point3d(), 100.0);

        Light light = new DirectionalLight();
        light.setInfluencingBounds(bounds);
        objRoot.addChild(light);

        Background bg = new Background(new Color3f(0.0f, 0.0f, 0.0f));
        bg.setApplicationBounds(bounds);
        objRoot.addChild(bg);

        TransformGroup trans = new TransformGroup();
        trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

        Transform3D yAxis = new Transform3D();
        Alpha rotationAlpha = new Alpha(-1, 4000);
        RotationInterpolator rotator =
            new RotationInterpolator(rotationAlpha, trans, yAxis, 0.0f, (float)Math.PI*2.0f);
        rotator.setSchedulingBounds(bounds);
        objRoot.addChild(rotator);

        Appearance ap = createAppearance();

        Sphere My3d = new Sphere(0.8f,Sphere.GENERATE_TEXTURE_COORDS,50,createAppearance());
        trans.addChild(My3d);
        objRoot.addChild(trans);

        return objRoot;
    }

    private Appearance createAppearance()
    {
        Appearance app = new Appearance();
        BufferedImage bimage = loadImage("My3d.jpg");
        Texture2D texture2d = (Texture2D)new TextureLoader(bimage, this).getTexture();
        app.setTexture(texture2d);
        return app;
    }

    private void connect(Canvas3D canvas3D, BranchGroup scene) {
        SimpleUniverse universe = new SimpleUniverse(canvas3D);
        universe.getViewingPlatform().setNominalViewingTransform();
        universe.addBranchGraph(scene);
    }
    
    public static BufferedImage loadImage(String fileName)
    {
        InputStream is = null;
        try
        {
            is = new FileInputStream(fileName);
            BufferedImage img = ImageIO.read(is);
            return img;
        }
        catch (IOException e)
        {
            throw new RuntimeException(e);
        }
    }

}
```

回転スピードが早いのと地軸については、皆さんがんばりましょう。

![スクリーンショット 2014-12-22 1.45.01.png](https://qiita-image-store.s3.amazonaws.com/0/33317/c79afea8-1bf5-708b-394f-3c5b6ce9bf69.png "スクリーンショット 2014-12-22 1.45.01.png")