ローカル座標系
< 前へ [ トップへ ] 次へ >

 ここでは、ローカル座標系の概念と扱いについて解説します。
 これまで、スクリーン座標系とワールド座標系という、2つの特別な座標系を扱ってきました。それに対し、ここで扱うのは特別でもなんでも無い普通の座標系、ローカル座標系です。複雑なモデルを動かしたい場合、いくつものローカル座標系を組み合わせて用いる事になるでしょう。しかし、心配は無用です。RINEARN 3D では、複雑な多重階層の座標系関係も、パズル感覚で非常に簡単に扱えるよう工夫されています。


 ローカル座標系

 リアルタイム3Dでは、立体に動きを付けるために多数の座標系を使用します。立体をワールド座標系上に直接配置する事はあまりせず、まずは座標系を用意して立体をそこに配置し、そしてその座標系を介してワールド座標系に配置したり、別の座標系に配置したりします。このような用途で使う座標系のことをローカル座標系と呼びます。

  


 ローカル座標系の宣言と配置

 RINEARN-X 3Dでは、ワールド座標系もローカル座標系も、同一のオブジェクトで表されます。これらを表す座標系オブジェクトとして、前節でも扱った CoordinateSystem3DEG クラスが用意されています。 CoordinateSystem3DEG クラスは座標系と同一視して手軽に扱うことができる、強力なクラスです。詳しくは前節をご参照下さい。


・ローカル座標系の宣言
 ローカル座標系は3Dコンピュータグラフィックスの描画に必須の座標系では無く、プログラマが必要に応じて、必要な分だけ用意するものです。あらかじめ用意されているものではありません。従ってローカル座標系は、CoordinateSystem3DEG クラスをプログラム中でインスタンス化して用意します。



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


public class Test{

  public static void main(String[] args){

    /*ローカル座標系を宣言*/
    CoodinateSystem3DEG local
      = new CoordinationSystem3DEG();


  }
}


・ローカル座標系の配置
 続いて、ローカル座標系を配置します。RINEARN-X 3Dでは、座標系上に別の座標系を貼り付けることができます。それにはCoordinateSystem3DEG クラスの add( CoordinateSystem3DEG ) メソッドを使用します。

add( CoordinateSystem3DEG 配置する座標系 )

ここでは、第1章で使い慣れた Realtime3DFrame クラスを用意し、そのワールド座標系上の位置:( 1, 2, 3 )にローカル座標系を配置してみましょう。


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のワールド座標系を取得*/
    CoordinateSystem3DEG world = frame.getWorldSystem();



    /*ローカル座標系を宣言*/
    CoodinateSystem3DEG local
      = new CoordinationSystem3DEG();

    /*localの原点位置を( 1, 2, 3 )に設定*/
    local.setOrigin( 1, 2, 3 );



    /*ワールド座標系上に、ローカル座標系を配置*/
    world.add( local );

  }
}


 ここで使用した setOrigin メソッドは、座標系の原点位置を指定するメソッドです。この他にも、座標系には回転や平行移動などの様々な機能が用意されています。詳しくは次節以降で扱います。
 さて、このプログラムを実行しても何も描画されません。まだ何も立体を配置していないからです。それでは、ローカル座標系上に立体を配置してみましょう。


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

・立体の配置

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


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

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

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

 前前節でも述べた通り、座標系上に立体を配置しただけでは、立体は画面に描画されない事にご注意ください。座標系上に配置するという行為は、単に立体の位置関係を指定しただけであり、描画登録はまた別の話なのです。立体を描画させたい場合は、スクリーン座標系にその立体を 「 描画リクエスト 」 しなければなりません。それにはスクリーン座標系の request メソッドの引数に、描画させたい立体を渡します。詳しくは前前節をご参照ください。


 座標系に配置する


 ここでは例として、ワールド座標系の原点と、ローカル座標系の原点に座標軸モデルを配置してみましょう。


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のワールド座標系を取得*/
    CoordinateSystem3DEG world = frame.getWorldSystem();

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



    /*ローカル座標系を宣言*/
    CoordinateSystem3DEG local
      = new CoordinateSystem3DEG();

    /*localの原点位置を( 1, 2, 3 )に設定*/
    local.setOrigin( 1, 2, 3 );

    /*ワールド座標系上に、ローカル座標系を配置*/
    world.add( local );



    /*座標軸モデル1*/
    AxisModel3DEG axis1 = new AxisModel3DEG();
    world.add( axis1 ); /*ワールド座標系上に配置*/
    screen.request( axis1 ); /*描画リクエスト*/


    /*座標軸モデル2*/
    AxisModel3DEG axis2 = new AxisModel3DEG();
    local.add( axis2 ); /*ローカル座標系上に配置*/
    screen.request( axis2 ); /*描画リクエスト*/

  }
}


▼実行結果

 上の結果で、ローカル座標系の原点に配置した座標軸モデルは、ちょうどワールド座標系の ( 1, 2, 3 ) のあたりに描画されています。そこはワールド座標系から見た、ローカル座標系の座標原点の位置です。この状態でローカル座標系を動かせば立体も動きますし、回転させれば立体もまわります。それに関する基本的な操作は次節以降で扱います。

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


スポンサーリンク



スポンサーリンク

この階層の目次
新しいお知らせ

次回のVCSSL 3.4.10において、関数1個の挙動に非互換な修正が適用されます
2019年02月12日 - VCSSLの次回の正式リリース版3.4.10において、これまでドキュメントと実際の挙動が異なっていた描画系の関数1個に、非互換な修正が適用されます。その詳細と、使用コードでの対応方法について解説します。

RINEARNのソフトウェア向けにOpenJDKで生成したJava実行環境(JRE)の提供を開始
2019年02月06日 - Javaのリリースモデル変更への対応として、OpenJDKのjlinkツールを用いて、RINEARNのソフトウェア実行用に生成したJava実行環境(JRE)の提供を開始しました。その詳細と、今後の方針について解説します。

シンプル&コンパクトなプログラム関数電卓! 「 リニアンプロセッサー nano 」の概要
2019年01月26日 - RINEARNでは現在、プログラム関数電卓ソフト「 リニアンプロセッサー 」の派生版として、シンプル&コンパクトな方向性を目指した「 リニアンプロセッサー nano 」を開発中です。その概要をご紹介します。

コードアーカイブ新着
入力された数式を積分して値とグラフを表示するツール

画面上で数式を入力すると、それを数値的に積分し、値とグラフを表示してくれるGUIツールです。
2019年01月20日
z = f(x,y,t) の形の数式を3Dグラフとしてアニメーション描画するツール

入力欄に z = f(x,y,t) の形の数式を入力すると、それを3次元のグラフにアニメーション描画してくれる簡易ツールです。
2018年11月26日
y = f(x,t) の形の数式を2Dグラフとしてアニメーション描画するツール

入力欄に y = f(x,t) の形の数式を入力すると、それを2次元のグラフにアニメーション描画してくれる簡易ツールです。
2018年11月25日
t を媒介変数とする x(t), y(t), z(t) の数式を3Dグラフに描画し、アニメーションもできるツール

入力欄に x(t), y(t), z(t) の形の数式を入力すると、それを t を媒介変数として3次元のグラフに描画し、アニメーションもできる簡易ツールです。
2018年11月20日
t を媒介変数とする x(t), y(t) の数式を2Dグラフに描画し、アニメーションもできるツール

入力欄に x(t), y(t) の形の数式を入力すると、それを t を媒介変数として2次元のグラフに描画し、アニメーションもできる簡易ツールです。
2018年11月19日
公式Twitterアカウント

スポンサーリンク