Webサイト制作コースのお申し込みはこちら

Java 3Dとは?

Java 3Dは、1999年にJavaの拡張としてSun Microsystems社によって開発された3D-CGのAPIです。

そのため、Java 3Dのプログラムは、各種タイプのコンピューター上で実行できます。

もし、「APIって何だろう?」と思っている人は、よければ以下の記事を参考にしてみてくださいね。

【関連記事】

▶︎JavaのAPIとは?よく使うJavaのAPIも解説

Java 3Dのメリットとしては、次のものが挙げられます。

Java 3Dの3つのメリット
  • 開発環境は全て無料で使える
  • 演算処理・描画プロセスなどの知識がなくても使える
  • アプレットとしてWeb上で公開できる

Java 3Dは、他のグラフィック・ライブラリよりも単純なインターフェースですが、ゲームやアニメーションにも応用可能です。

グラフィックスの描画処理は、「DirectX」や「OpenGL」などのグラフィック・ツールを基にしています。

Java 3Dのインストール方法

前章で、Java 3Dの概要を説明しました。

ここでは、Java 3Dをインストールする方法を見ていきましょう。

まず、「Java 3D API」ページを開きます。

そうすると、ダウンロード画面が表示されるので、最新バージョンを選択しましょう。

2021年1月現在では、「Java 3D 1.5.1」が最新です。

Java 3Dのインストール方法

ダウンロードページを開き、OSに対応したファイル群をダウンロードしましょう。

Java 3Dのインストール方法

ダウンロードすると中身は次のようになっているはずです。

Java 3Dのインストール方法

「j3d-jre.zip」を解凍すると、次の3種類のjarファイルが格納されています。

  1. j3dcore.jar
  2. j3dutils.jar
  3. 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メソッドで貼り付けられています。

そして、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/

クラスの使い方や詳細を確認したい場合は、参考にしてみると良いでしょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。