環境
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つあります。
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);
}
}
}
回転スピードが早いのと地軸については、皆さんがんばりましょう。