スクリーン座標系(画面座標系)
< 前へ [ トップへ ] 次へ >

 前回までは、座標系の概念や種類について、文章主体の説明を行ってきました。今節からは、実際に例題プログラミングを交えながら、RINEARN 3Dにおける座標系の扱いを習得していきましょう。
 まず始めに扱うのは、3Dコンピュータグラフィックスにおいて必要不可欠な座標系である、スクリーン座標系です。


 スクリーン座標系

・スクリーン座標系
 前節でも述べましたが、スクリーン座標系は、パソコンの画面に張り付いた形で存在する特別な座標系です。もう少し詳しく言うと、画面の中心を原点とし、画面右方向にX軸、上方向にY軸、手前方向にZ軸がある座標系として定義されています。ユーザーが方向設定を明示的に変更しない限り、いかなる時もこの位置関係は変わりません。

  
 スクリーン座標系で Z = 0 の面、即ち X-Y 平面は、パソコンの画面と一致します。そしてZ軸の正の方向にある領域は画面の手前、つまりユーザーのいる現実の世界です。反対にZ軸の負の方向にある領域は画面の奥、すなわち3D仮想空間の中です。このようにスクリーン座標系は、現実世界と3D仮想空間との間を繋ぐ座標系であると言えるでしょう。

・スクリーン座標系と描画エンジン
 さて、パソコンの画面上には、3D仮想空間の様子をスクリーン座標系のX-Y平面に投影した映像を描画する必要があります。この役目は一般の3Dシステムでは3D描画エンジンや、専用ハードウェアの役目ですが、RINEARN 3Dではスクリーン座標系が描画機能も兼ね備えたものとして設計されています。


 ScreenSystem3DEGクラス

 RINEARN-X 3Dではスクリーン座標系を表すオブジェクトとして ScreenSystem3DEG クラスが用意されています。
 もし自分で独自の表示システムを開発したい際には、ScreenSystem3DEG クラスを自分で宣言し、そこから出力されてくる3Dコンピュータグラフィックス画像をパソコン画面上に表示するように設計します。しかしそれに関する詳しい話は第3章に譲るとして、ここでは第1章に引き続き Realtime3DFrameクラスを使用しましょう。
 Realtime3DFrameクラスは3Dコンピュータグラフィックスを画面上に表示するシステムですから、当然ながら内部に画面座標系を保持しています。この画面座標系は getScreenSystem( ) メソッドで取得する事ができます。


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();

    /*frameのスクリーン座標系を取得*/
    ScreenSystem3DEG screen = frame.getScreenSystem();


  }
}



 立体の配置と描画リクエスト

・立体の配置
 スクリーン座標系上に立体を配置するには、ScreenSystem3DEGクラスの add メソッドを使用します。引数には配置したい立体モデルやポリゴン、構造体などを指定します。


ポリゴンを配置する場合:
add( Element3DEG 配置するポリゴン )

立体モデルを配置する場合:
add( Model3DEG 配置する立体モデル )

構造物を配置する場合:
add( Structure3DEG 配置する構造体 )

 ところで、座標系上に立体を配置しただけでは、立体は画面に描画されません。座標系上に配置するという行為は、単に立体の位置関係を指定しただけであり、描画登録はまた別の話なのです。立体を描画させたい場合は、スクリーン座標系にその立体を 「 描画リクエスト 」 しなければなりません。

・描画リクエストとキャンセル
 スクリーン座標系に立体を描画リクエストするには、ScreenSystem3DEGクラスの request メソッドを使用します。引数には描画させたい立体モデルやポリゴン、構造体などを指定します。


ポリゴンを描画させたい場合:
request( Element3DEG 配置するポリゴン )

立体モデルを描画させたい場合:
request( Model3DEG 配置する立体モデル )

構造物を描画させたい場合:
request( Structure3DEG 配置する構造体 )

なお、既に描画されている立体の描画リクエストを取り消すには、ScreenSystem3DEGクラスの cancel メソッドを使用します。引数には、描画リクエストを取り消したい立体モデルやポリゴン、構造体などを指定します。


 実際に配置する


 ここでは例として、スクリーン座標系の ( 0, 0, -10 ) に座標軸モデルを配置してみましょう。なお、( 0, 0, -10 ) とは、スクリーン座標系の原点つまり画面の中心から、「 X(右)方向に0, Y(上)方向に0, Z(手前)方向に-10 」 つまり画面奥へ 10 だけ行った位置を表します。
 なお、画面から 10 だけ奥へ配置する理由は、あまりにも画面に近過ぎると遠近感で大きくなりすぎて表示できないからです。


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();

    /*frameのスクリーン座標系を取得*/
    ScreenSystem3DEG screen = frame.getScreenSystem();

    /*座標軸モデル*/
    AxisModel3DEG axis = new AxisModel3DEG();
    axis.move( 0.0, 0.0, -10.0 );


    /*スクリーン座標系に座標軸モデルを配置*/
    screen.add( axis );

    /*描画リクエスト*/
    screen.request( axis );


  }
}

▼実行結果


 マウスで視点を操作しても、座標軸モデルが定位置にへばりついて全く動かない様子が体感できたかと思います。このようにスクリーン座標系は常に画面に対して固定されているので、スクリーン座標系上に直接立体を配置すると、つねに視点から定位置にある立体を表現する事ができます。
 この方法は例えば、シューティングゲームなどで自分の操縦する戦闘機などを表示するのに向いているでしょう。また、常に立体を斜め上方から照らしたい場合などに、スクリーン座標系上に光源を配置するという手法も考えられます。

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


スポンサーリンク


スポンサーリンク

この階層の目次
お知らせ

Vnanoのソースコードと開発リポジトリをGitHubで公開
2018年09月30日 - 現在開発中の、ソフトウェア上でのスクリプト処理用途に向けた小型・軽量スクリプトエンジン「 Vnano 」のソースコード&リポジトリを公開しました。ビルド・使用方法や、現状の段階と今後などを解説します。

リニアングラフ3D&2D Ver.5.6 リリース! Java言語のプログラムからも制御可能に
2018年08月19日 - 約5年ぶりの大きなバージョンアップを迎えた、新しいリニアングラフ Ver.5.6の特徴をご紹介します。UIがリファインされ、Java言語でグラフ描画ライブラリとして使う事も可能になりました。

ライセンスの緩和方向への改訂を実施、条件を満たす場合のソフトの再配布などが可能に
2018年07月16日 - RINEARNでは2018年7月に、ソフトウェアライセンスの緩和方向への改訂を実施しました。新ライセンスでは、いくつかの条件を満たす場合において、ソフトの再配布などが無申請で可能になりました。

コードアーカイブ新着
配列を3Dグラフにアニメーションプロットする(点/線グラフ)

座標値配列の内容を、3次元の点/線グラフに連続でプロットし、アニメーションさせるサンプルプログラムです。
2018年11月14日
配列を2Dグラフにアニメーションプロットする

座標値配列の内容を、2次元グラフに連続でプロットし、アニメーションさせるサンプルプログラムです。
2018年11月13日
配列を3Dグラフにプロットする(曲面/メッシュグラフ)

座標値配列の内容を、3次元の曲面/メッシュグラフにプロットするサンプルプログラムです。
2018年11月12日
ファイルを3Dグラフにプロットする(曲面/メッシュグラフ)

座標値ファイルの内容を、3次元の曲面/メッシュグラフにプロットするサンプルプログラムです。
2018年11月11日
連番画像をアニメーション再生する簡易ツール

フォルダ内の連番画像ファイルを、動画への変換不要で、そのままアニメーションとして再生できる簡易ツールです。
2018年09月04日
公式Twitterアカウント

スポンサーリンク