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

 ここでは、ローカル座標系の概念と扱いについて解説します。
 これまで、スクリーン座標系とワールド座標系という、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 ) のあたりに描画されています。そこはワールド座標系から見た、ローカル座標系の座標原点の位置です。この状態でローカル座標系を動かせば立体も動きますし、回転させれば立体もまわります。それに関する基本的な操作は次節以降で扱います。

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


スポンサーリンク



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

Vnanoがオープンベータ版に移行、VCSSLの実行環境で標準で実行可能に
2021年04月07日 - ソフト内組み込み用スクリプトエンジン&言語「 Vnano 」がオープンベータ版に移行し、併せて、VCSSLの実行環境でもVnanoコードの実行が可能になりました。詳細をお知らせします。

リニアングラフの最新版をリリース、2D版でも描画エンジンの直接操作が可能に
2021年04月03日 - リニアングラフ2D/3Dの最新版をリリースしました。それぞれのアップデート内容をお知らせします。今回から、2D版でもJava言語APIによる描画エンジンの直接操作が可能になりました。

RINPn のオープンベータ版をリリース! 詳細な公式ガイドも同梱&公開
2021年03月08日 - 2019年より開発進行中のプログラム関数電卓「 RINPn(りんぷん)」が、正式リリースに向けた最終準備段階として、オープンベータ版へと移行しました。その詳細をお知らせします。

コードアーカイブ新着
[公式ガイドサンプル] 引き算の結果を画面に表示する

「VCSSLスタートアップガイド」内のサンプルコードです。引き算を行って、結果を画面に表示します。
2021年07月08日
[公式ガイドサンプル] 式を複数行にわたって書く

「VCSSLスタートアップガイド」内のサンプルコードです。足し算を行う式を、複数行にわたって記述します。
2021年07月07日
[公式ガイドサンプル] 足し算の結果を画面に表示する

「VCSSLスタートアップガイド」内のサンプルコードです。足し算の結果を求めて、画面に表示します。
2021年07月06日
Vnano版 | ローレンツ方程式を数値的に解くプログラム

ローレンツ方程式を4次ルンゲ=クッタ法によって解き、グラフ描画用のデータを出力するプログラムです。
2021年02月12日
Vnano版 | 積分値のグラフ描画用データを出力するプログラム

数値的に積分を行い、結果の関数をグラフに描くためのデータを出力するコードです。
2020年12月20日
新着・お知らせ配信用Twitter