基本的な座標系
< 前へ [ トップへ ] 次へ >

 実は、プログラマが特に座標系を宣言しなくても、システム側で勝手に用意され、使用されている座標系が2つだけあります。それはスクリーン座標系ワールド座標系という特別な座標系で、3Dコンピュータグラフィックスを描画する上で最低限必要な座標系です。ここではそれらを含め、基本的な座標系について簡単に述べておきましょう。


 スクリーン座標系

 スクリーン座標系は、パソコンの画面に張り付いた形で存在する特別な座標系です。3Dコンピュータグラフィックス映像は、仮想世界の全ての立体を、スクリーン座標系のX-Y平面に投射したものです。言い換えれば、スクリーン座標系のX-Y平面はパソコンの画面に等しいのです。現実世界と仮想世界を繋ぐ座標系と言えるでしょう。

  
 スクリーン座標系が、他の座標系と決定的に異なる点がもう一つあります。それは、RINEARN-X 3Dのスクリーン座標系は、スクリーン上に3Dコンピュータグラフィックスを描画する機能を持っているという点です。つまりスクリーン座標系は、仮想世界を自身のX-Y平面に投射した様子を、画像として出力することができるのです。まさにスクリーン(画面)そのものと見なせるわけです。
 このようにスクリーン座標系は、3Dコンピュータグラフィックスに必要不可欠な存在であり、どんな時でも必ず存在しなければなりません。実は、これまで第1章で用いてきたRealtime3DFrameクラスも、起動時にスクリーン座標系を用意しており、そのスクリーン座標系に投射された映像を自身のウィンドウに表示していたのです。


 ワールド座標系

 スクリーン座標系に加えて、もう一つだけ必要不可欠な座標系が存在します。それがワールド座標系です。
 ワールド座標系はスクリーン座標系上に配置されています。そして、立体モデルは通常、スクリーン座標系ではなくワールド座標系上に配置されるのです。
   
 このようにワールド座標系を用いる利点は、まず第一にカメラ視点の変更を容易にできる事があげられます。仮に多数の立体を直接スクリーン座標に配置してしまうと、視点を変更した際、全ての立体を構成する無数の頂点座標の位置関係を複雑に計算しなおさなければなりません。そこで全立体に共通の座標系、つまりワールド座標系を一枚噛ませて配置しておけば、視点変更の際はワールド座標系だけを動かせばよいので、非常に単純な作業ですみます。
 加えて、ワールド座標系がもたらす第二の利点として、仮想空間上においてカメラ視点に左右されない絶対的な座標が定義できるという点が挙げられます。例えば3Dシューティングゲームなど、広大な舞台において複雑に運動する物体を多数制御しなければならないような場合には、地面に固定された絶対的な座標系を基準として処理を記述するのが好ましい事がよくあります。

 なお、ここではスクリーン座標系にワールド座標系を配置する前提で解説しましたが、抽象化された3Dシステムの中には、ワールド座標系上にスクリーン座標系を配置する操作が可能な場合もあります(変換行列が順変換か逆変換かの違いだけで、処理に本質的な違いはありません)。そういった場合はスクリーン座標系をカメラ座標系と呼ぶ場合もあります。RINEARN-X 3Dでも、近い将来にこういったカメラ座標系的な配置機能が導入される予定です。


 ローカル座標系

 さて、スクリーン座標系でもワールド座標系でも無い、プログラマが自由な用途で使用する座標系は、一般にローカル座標系と呼ばれます。ローカル座標系は必須では無いので、プログラマが必要に応じて必要な数だけ宣言し、用意します。
 例えば 「 動く街 」 を表現したいなら、まず野原や山などの動かない立体はワールド座標系上に配置し、電車やバス・飛行機などの動く立体にはローカル座標系をそれぞれに用意して、その上に配置します。


もし飛行機のプロペラを回したいなら、飛行機座標系(ローカル)の上にプロペラ座標系(ローカル)を配置し、そこにプロペラを配置して回します。また人物キャラクターなどのように複雑な動きをする立体モデルには、腕座標系や足座標系、頭座標系なども必要になるでしょう。

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


スポンサーリンク



スポンサーリンク

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

リニアンプロセッサー nano の先行開発版やソースコードリポジトリを公開
2019年04月16日 - オープンソースで開発中の小型プログラム関数電卓ソフト、「 リニアンプロセッサー nano 」の先行開発版やソースコードリポジトリを公開しました。概要と使用方法、ビルド方法などについて解説します。

各ソフトウェアの最新版を一括でリリース、OpenJDKのJava実行環境(JRE)に対応
2019年03月06日 - RINEARNでは3月6日に、主要なソフトウェアの最新版を一括でリリースしました。今回のアップデートには、以前お知らせした、OpenJDKで生成したJREへの対応が含まれています。その概要等をお知らせします。

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

コードアーカイブ新着
[公式ガイドサンプル] 立体モデルを生成して3D空間に配置する

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを生成し、3D空間に配置します。
2019年05月21日
[公式ガイドサンプル] ポリゴンを生成して3D空間に配置する

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体の基本的な構成要素となるポリゴンを生成し、3D空間に配置します。
2019年05月20日
[公式ガイドサンプル] CSVファイルにデータを書き出し&読み込んで、複雑な3次元曲面のグラフを描く(魔法陣形)

「VCSSLスタートアップガイド」内のサンプルコードです。CSVファイルにデータを書き出し、さらにそれを読み込んで、魔法陣のような3次元曲面のグラフを描画します。
2019年05月17日
[公式ガイドサンプル] CSVファイルにデータを書き出し&読み込んで、複雑な3次元曲面のグラフを描く(花形)

「VCSSLスタートアップガイド」内のサンプルコードです。CSVファイルにデータを書き出し、さらにそれを読み込んで、花の形の3次元曲面のグラフを描画します。
2019年05月16日
[公式ガイドサンプル] CSVファイルにデータを書き出し、読み込んで3次元のメッシュグラフを描く

「VCSSLスタートアップガイド」内のサンプルコードです。CSVファイルにデータを書き出し、さらにそれを読み込んで、3次元のメッシュグラフを描画します。
2019年05月16日
公式Twitterアカウント

スポンサーリンク