表示システム
< 前へ [ トップへ ] 次へ >


 3Dプログラミングを始めるにあたって、まず最初に必要になるのが、3Dコンピュータグラフィックスをパソコンの画面上に表示する為のシステム ― 表示システムです。ここでは、表示システムについて解説します。
 RINEARN-X 3Dでは、描画エンジンを直接呼び出して独自の表示システムを開発する事も可能ですが、より簡単に、様々な用途に対応できる、標準の表示システムも容易されています。



 即席利用を可能にしてくれるRealtime3DFrameクラス

 一口に表示システムと言っても、3Dコンピュータグラフィックスを独立ウィンドウ上に表示するものや、フルスクリーンで表示するもの、または別のプログラム中に埋め込まれた形で表示するものなど、様々なものが考えられるでしょう。
 RINEARN-X 3Dには、ユーザーが即席で利用可能な表示システムとして、Realtime3DFrame クラスが用意されています。これは独立ウィンドウの形態をとる表示システムです。Realtime3DFrameクラスは基本的な座標管理や画面表示システムをはじめ、リアルタイム情報更新やマウスによる視点操作機能など基本的な機能をすべて標準搭載しており、誰でも簡単にリアルタイム3Dコンピュータグラフィックス技術を利用できるように設計されています。


 3D画面を起動する

 それでは、実際にRealtime3DFrameクラスを起動してみましょう。ソースコード(ここではTest.JAVA)に、以下のように記述してください。


import rxvesapi.system3d.geometry.*;
import rxvesapi.system3d.renderer.*;
import rxvesapi.system3d.model.*;


public class Test{

  public static void main(String[] args){

    /*3D仮想空間を起動*/
    Realtime3DFrame frame = new Realtime3DFrame();

  }
}


▼実行結果

 このようにウィンドウが立ち上がって、何も無いフルグレーの画面が表示されたなら成功です。 ここに映っているのがあなたがこれから造り上げていく舞台となる3D仮想空間であり、時間も流れています。画面に何も無いのはまだ何も配置していないからであり、画面には確かに3D仮想空間が表示されているのです。これからあなただけの世界を作り上げていきましょう。
 箱庭やゲームを作って遊んでみるのも面白いかもしれません。複雑な分子・結晶構造の可視化など、学術用途でもあなたを大いに助けてくれることでしょう。

なお、背景の色は setScreenBackground( Color 背景色 ) メソッドで設定できます。


import rxvesapi.system3d.geometry.*;
import rxvesapi.system3d.renderer.*;
import rxvesapi.system3d.model.*;


import java.awt.Color;


  public class Test{

    public static void main(String[] args){

    /*3D仮想空間を起動*/
    Realtime3DFrame frame = new Realtime3DFrame();

    /*背景をホワイトにする*/
    frame.setScreenBackground( Color.white );

  }
}



 画面の基本操作

 Realtime3DFrameはマウス入力やキー入力のフィードバック機能を搭載しており、カメラアングルの変更や視点の平行移動などを簡単に行う事ができます。

・カメラアングルの変更
 画面上をマウスでドラッグすると、カメラアングルが回転的に移動します。基本的には注視点を軸として、ドラッグした方向に空間を掴んで回す感覚になります。また画面中心を軸として円を描くようにドラッグすると、仮想空間も画面中心を軸として回転します。

・視点の平行移動
キーボードの↑↓キーで奥/手前、また← →キーで左右に視点を平行移動します。また[Shift]キーを押しながら↑↓キーで画面上下方向に視点を平行移動します。


 ボタンなどのコンポーネントを配置するには

 Realtime3DFrameのウィンドウ上には、通常のJFrameと同様に、ボタンやラベル、テキスト入力エリアなどのコンポーネント類を配置する事が可能です。
 ただし、Realtime3DFrameの add メソッドを直接呼び出すのでは無く、まず getDisplayPanel( ) メソッドを呼び出し、3D画面パネルを取得してください。このメソッドはRealtime3DPanelという、JPanelを継承したオブジェクトを返します。
 そして、取得した3D画面パネルのaddメソッドを呼び出し、コンポーネントを配置してください。


import rxvesapi.system3d.geometry.*;
import rxvesapi.system3d.renderer.*;
import rxvesapi.system3d.model.*;


import java.awt.*;
import javax.swing.*;

  public class Test{

    public static void main(String[] args){

    /*3D仮想空間を起動*/
    Realtime3DFrame frame = new Realtime3DFrame();

    /*画面パネルのレイアウト設定を初期化*/
    frame.getDisplayPanel().setLayout( null );

    /*ボタン*/
    JButton b = new JButton( "START" );
    b.setBounds( 10, 10, 100, 30);

    /*画面パネルにボタンを配置*/
    frame.getDisplayPanel().add( button );

  }
}

▼実行結果



 Realtime3DFrameを使用しない方法もある

 Realtime3DFrameクラスを用いずに、オリジナルの表示システムを自分で構築する事も可能です。というのもRealtime3DFrameクラス自身も実は特別なクラスでは無く、RINEARN 3Dの各クラスを組み合わせて作成されているからです。従って自分でRealtime3DFrameクラスのような独自の表示システムを構築する事は十分に可能なのです。その方がカメラワークなどの自由度も格段に上がりますし、オリジナル設計のマウス&キーフィードバック機能を搭載したり、状況に応じて処理速度を可変させるなど小回りの効くプログラムが記述できるでしょう。
 しかしながら自分で独自の表示システムを構築するには、RINEARN-X 3Dの各クラスの役割をある程度熟知している必要がありますし、基本的な3D描画プロセスの流れを把握していなければなりません。従ってそのような手法は上級者向けと言えるでしょう。

▼ Realtime3DFrameを使用した場合と、表示システムを自分で構築した場合の比較。
Realtime3DFrameを利用 表示システムを自分で構築
開発の難易度 非常に簡単 上級者向け
最大処理能力 同じ 同じ
カメラワークの自由度 低い 自由に設計可能
マウス操作 視点の回転に対応 自由に設計可能
キー操作 視点の平行移動に対応 自由に設計可能
画面の表示方法 独立ウィンドウが起動 自由に設計可能


 実際にオリジナルの表示システムを構築するには、ScreenSystem3DEGクラスを活用します。ScreenSystem3DEGは3D描画エンジンの役割を担っているクラスで、RINEARN 3Dを構成する各クラスの中でも中核に位置するクラスです。
 例えばリアルタイムの表示システムでは、毎秒数十回程度の周波数で繰り返すループを独立スレッドで走らせ、そしてループ毎にScreenSystem3DEGから3DCG画像を取得し、それを画面上に表示するように設計します。

< 前へ [ トップへ ] 次へ >