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

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


 スクリーン座標系

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

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


 ワールド座標系

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

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


 ローカル座標系

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


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

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