トップページ > Java3D入門 > Java3Dの基礎知識(1)

仮想空間の構築について

基本的な構成

Java3Dでは主に3次元の立体図形を扱うことになります。 3D図形を設置するためには3D空間が必要になりますが,この3D空間のことをJava3Dでは “Virtual Universe”(バーチャル・ユニバース)と呼んでいます。 「宇宙」なんですね…なんか大げさな感じです。 直訳して「仮想宇宙」と書くよりも「仮想空間」の方が頻繁に用いられる用語なので, このページでもJava3Dで扱う3次元空間のことを仮想空間と呼ぶことにします。

3D空間を表現するためには,メインとなる「3D図形オブジェクト」を空間内に配置します。 ただし,これだけでは画面には何も表示されません。図形オブジェクトを見る「視点」と, 図形オブジェクトを光で照らす「ライト」を仮想空間内に配置する必要があります。

視点はカメラのようなものです。カメラの場所・カメラの方向などを正しく設定しないと, 空間内に配置された図形オブジェクトを見ることができません。初期のデバッグ作業では 画面に何も映らなかった場合にカメラが原因なのか,それとも本当に図形オブジェクトが無いのか を考えながら行うことになります。

視点が正しく設定されていても,画面が真っ暗ということがあります。 仮想空間は「Universe」というだけあって,初期段階では物を照らす光が全くない 状態で生成されます。図形オブジェクトがあって,カメラがあっても, それを照らすライトを設定しないと何も見えない状態になります。 面倒だ・・・と感じるかもしれませんが,ライトを自分で設定することで 視覚的に面白い効果を出すことができる他,影の効果など非常にリアルな 表現が可能になっています。

3D空間を描画するために…

Java3Dでは,3D仮想空間を表示するための“Canvas3D”というクラスが用意されています。 Javaで平面図形を描画するために用意されている“Canvas”クラスの3D版という感じです。 実際のアプリケーションを組む際は,最初にフレーム(空のウィンドウ)を 用意し,その上にコンテント・ペイン(実体はJPanel)を貼り付けます。 後は,他のGUI部品と同様にCanvas3Dをコンテント・ペイン上に張り付けるだけです。 コンテント・ペインは無くても構わないのですが, Canvas3D以外にたくさんのGUI部品をフレーム上に配置する場合はコンテント・ペインがあったほうが 便利です。さらに,後から全体をまとめてクラス化する時も重宝するので,今回はこの構成でいきます。

試しにSimpleUniverseを生成してみます

“SimpleUniverse”というのは,VirtualUniverseクラスのサブクラスで必要最低限の要素を既に含んだものです。 細かい設定をせずに,簡単に3D描画を行いたい場合はこのクラスを使ったほうが楽です。

ここではテストプログラムとして,Java3Dアプリケーションの最低限の骨組である「Canvas3Dを載せたウィンドウ」 を表示させてみます。何も面白くありません(汗)ただし,これは今後何度も出てくるものなので,最初に 確認しておくと後が楽です。

細かい説明は後回しにします。まずはテストプログラムを動かしてみましょう。 以下のソースコードをコピペして,“SimpleUniverse_test.java”の名前で保存,コンパイル,実行します。

ソースコード : SimpleUniverse_test.java

//******************************************************************************
//Java3D SimpleUniverse_test
//空のUniverseを表示するだけです。
//******************************************************************************


//==============================================================================
//クラスのインポート
import javax.media.j3d.*;

import com.sun.j3d.utils.universe.*;

import java.awt.*;

import javax.swing.*;



//==============================================================================
//メイン・クラス
public class SimpleUniverse_test
{

 //=============================================================================
 //メイン・メソッド
 public static void main(String[] args)
 {
  SimpleUniverse_test test = new SimpleUniverse_test();
 }



 //=============================================================================
 //コンストラクタ
 public SimpleUniverse_test()
 {

  //============================================================================
  //まずは,基礎フレームの設定。
  //============================================================================

  //メイン・ウィンドウ作成
  JFrame frame = new JFrame();

  //ウィンドウのサイズ設定
  frame.setSize(250,250);

  //ウィンドウのタイトル設定
  frame.setTitle("SimpleUniverse_test");

  //ウィンドウを閉じる動作の登録
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  //コンテントペインを作成
  JPanel cp = new JPanel();

  //コンテントペイン上のレイアウトは全て手動で行う
  cp.setLayout(null);

  //フレームに,コンテントペインを登録
  frame.add(cp);




  //============================================================================
  //次にJava3D関係の設定。
  //============================================================================

  //現在使用している画面の,ハードウェア情報を取得する
  GraphicsConfiguration g_config = SimpleUniverse.getPreferredConfiguration();

  //Canvas3Dは,3Dグラフィクスを表示する領域
  Canvas3D canvas = new Canvas3D(g_config);

  //3D表示領域の大きさを設定。今回はウィンドウいっぱいに表示する
  canvas.setBounds(0,0,250,250);

  //コンテントペインにCanvas3Dを登録
  cp.add(canvas);


  
  //============================================================================
  //空のSimpleUniverseを生成。
  //============================================================================
 
  //仮想空間のインスタンスを生成。表示先としてcanvasを指定。
  SimpleUniverse universe = new SimpleUniverse(canvas);

  //canvasにuniverseを登録後,ウィンドウ可視化
  frame.setVisible(true);
  
 }

}
//ソースコードここまで。
//******************************************************************************

実行画面

真っ暗です。物体もライトも無いので,こうなります。これから,この仮想空間にカメラやオブジェクトを追加する 作業をしていきます。

ここから先は,ソースコードの解説です。


クラスのインポート

“import javax.media.j3d.*;”でJava3D APIパッケージをインポートしています。これにはCanvas3Dをはじめ, 3D描画に関わる基本的なクラスが含まれています。“import com.sun.j3d.utils.universe.*;”では SimpleUniverseなど,仮想空間生成に関わるクラスがインポートされます。 “import java.awt.*;“と”import javax.swing.*;”はお馴染みですね。 GUIを使うために必要なクラスがインポートされています。


main()メソッド

コンストラクタを呼んでいるだけです。


基礎フレームの設定

フレームを生成,フレームのタイトルとサイズ,「×ボタン」を押したときの処理について記述されています。 その後,コンテント・ペインを生成してフレームへ貼り付けます。 ここまでは普通のウィンドウ・アプリケーション作成の手順と全く同じです。


Java3D関係の設定

Cnavas3Dを生成しているところです。Canvas3Dを生成する際には,現在使用している画面のハードウェア的な 情報が必要となるので“SimpleUniverse.getPreferredConfiguration()”メソッドを呼んでハードウェア情報を 取得しています。後は,生成したCanvas3Dのサイズを設定してコンテント・ペインの上へ貼り付けています。


SimpleUniverseを生成

Canvas3Dのインスタンス,“canvas”を対象としてSimpleUniverseをインスタンス化,登録しています。 最後にGUI部品が全部そろったところで,setVisible(true)を呼んでウィンドウを表示しています。




戻る   次へ