LoginSignup
1
2

More than 5 years have passed since last update.

Java3D Install & Earth

Posted at

環境
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が3つあります。

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
ウィンドウサイズ、タイトルを変えましたが、ほぼ原文です。

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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2