Java 3Dとは?
Java 3Dは、1999年にJavaの拡張としてSun Microsystems社によって開発された3D-CGのAPIです。
そのため、Java 3Dのプログラムは、各種タイプのコンピューター上で実行できます。
もし、「APIって何だろう?」と思っている人は、よければ以下の記事を参考にしてみてくださいね。
【関連記事】
Java 3Dのメリットとしては、次のものが挙げられます。
- 開発環境は全て無料で使える
- 演算処理・描画プロセスなどの知識がなくても使える
- アプレットとしてWeb上で公開できる
Java 3Dは、他のグラフィック・ライブラリよりも単純なインターフェースですが、ゲームやアニメーションにも応用可能です。
グラフィックスの描画処理は、「DirectX」や「OpenGL」などのグラフィック・ツールを基にしています。
Java 3Dのインストール方法
前章で、Java 3Dの概要を説明しました。
ここでは、Java 3Dをインストールする方法を見ていきましょう。
まず、「Java 3D API」ページを開きます。
そうすると、ダウンロード画面が表示されるので、最新バージョンを選択しましょう。
2021年1月現在では、「Java 3D 1.5.1」が最新です。
ダウンロードページを開き、OSに対応したファイル群をダウンロードしましょう。
ダウンロードすると中身は次のようになっているはずです。
「j3d-jre.zip」を解凍すると、次の3種類のjarファイルが格納されています。
- j3dcore.jar
- j3dutils.jar
- vecmath.jar
jarファイルも圧縮されていますので、展開しておきます。
展開するには、次のコマンドをターミナルに入力します。
jar -xvf "jarファイル名".jar
今回のjarファイルでいうと次のように入力しましょう。
jar -xvf j3dcore.jar
展開すると「com」や「javax」のディレクトリができるはずです。
Java 3Dで球体を描画するサンプルコード
ここでは、Java 3Dで球体を描画するサンプルコードを紹介します。
■記述例(J3DCG.java) import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.universe.*; import java.awt.*; import javax.swing.*; import javax.media.j3d.*; import javax.vecmath.*; public class J3DCG extends JPanel { public static void main (String[] args) { J3DCGPanel j3dcgpanel = new J3DCGPanel(); JFrame frame = new JFrame("J3DCG.java"); frame.getContentPane().add(j3dcgpanel); frame.setSize(300,300); frame.setVisible(true); frame.setBackground(Color.white); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } class J3DCGPanel extends JPanel { public J3DCGPanel() { setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); add(canvas, BorderLayout.CENTER); SimpleUniverse universe = new SimpleUniverse(canvas); BranchGroup root = new BranchGroup(); Sphere sphere = new Sphere(0.6f); root.addChild(sphere); Color3f lightColor = new Color3f(1.0f, 0.0f, 1.0f); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100); Vector3f lightDirection = new Vector3f(4.0f, 5.0f, -10.0f); DirectionalLight light = new DirectionalLight(lightColor, lightDirection); light.setInfluencingBounds(bounds); root.addChild(light); universe.getViewingPlatform().setNominalViewingTransform(); universe.addBranchGraph(root); } }
ソースコードについて少し説明します。
import com.sun.j3d.utils.geometry.*; import com.sun.j3d.utils.universe.*; import java.awt.*; import javax.swing.*; import javax.media.j3d.*; import javax.vecmath.*;
今回のプログラムで必要なパッケージをインポートしています。
public class J3DCG extends JPanel { public static void main (String[] args) { J3DCGPanel j3dcgpanel = new J3DCGPanel(); JFrame frame = new JFrame("J3DCG.java"); frame.getContentPane().add(j3dcgpanel); frame.setSize(300,300); frame.setVisible(true); frame.setBackground(Color.white); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
J3DCGクラスを定義しています。
「J3DCGPanel」のオブジェクト、「JFrame」のオブジェクトをそれぞれ生成します。
getContentPaneメソッドで、コンテンツ・ペインを取得し、j3dcgpanelオブジェクトがaddメソッドで貼り付けられています。
- setSizeメソッド:フレームのサイズを300×300に設定
- setVisibleメソッド:フレームを可視化
- setBackgroundメソッド:フレームの背景色を白に設定
そして、setDefaultCloseOperationメソッドでフレームの終了処理を指定しました。
class J3DCGPanel extends JPanel { public J3DCGPanel() { setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); add(canvas, BorderLayout.CENTER); SimpleUniverse universe = new SimpleUniverse(canvas); BranchGroup root = new BranchGroup(); Sphere sphere = new Sphere(0.6f); root.addChild(sphere); Color3f lightColor = new Color3f(1.0f, 0.0f, 1.0f); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100); Vector3f lightDirection = new Vector3f(4.0f, 5.0f, -10.0f); DirectionalLight light = new DirectionalLight(lightColor, lightDirection); light.setInfluencingBounds(bounds); root.addChild(light); universe.getViewingPlatform().setNominalViewingTransform(); universe.addBranchGraph(root); } }
J3DCGPanelをJPanelのサブクラスとして定義しています。
setLayoutでBorderLayoutのレイアウト指定を行い、GraphicsConfigurationの設定をします。
GraphicsConfigurationは、Java 3Dで用いられるデバイスの状況を抽象化したオブジェクトです。
getPreferredConfigurationメソッドで取得されます。
Canvas3D(config)でキャンバスを生成しており、3D-CGオブジェクトをキャンバスに表示する指定を行いました。
以下の部分でシーン・グラフを生成しています。
SimpleUniverse universe = new SimpleUniverse(canvas); BranchGroup root = new BranchGroup(); Sphere sphere = new Sphere(0.6f);
球体を表すSphereのオブジェクトsphereを生成し、引数の「0.6f」で半径を指定します。
そして、Color3f(1.0f, 0.0f, 1.0f)で球体の色をマゼンタにしています。
BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100)
で、中心は原点、半径は100で光源を設定しています。
light.setInfluencingBounds(bounds) で、boundsで設定した描画範囲にlightを設定。
getViewingPlatformでViewingPlatformオブジェクトが生成され、視点を設定しています。
そして、setNominalViewingTransformで、視点位置をz軸方向に移動しました。
Java 3DのAPI・ライブラリ
Java 3Dのパッケージやクラスを確認したい場合は、以下のページから確認可能です。
https://download.java.net/media/java3d/javadoc/1.5.2/
クラスの使い方や詳細を確認したい場合は、参考にしてみると良いでしょう。