3D 座標系

3D 座標系

一般に、3D グラフィックス アプリケーションでは直交座標系の左手座標系と右手座標系のどちらかを使う。どちらの座標系でも、x 軸の正方向は右側であり、y 軸の正方向は上方である。z 軸の正方向は、x 軸 の正方向に左手または右手の指を向け、それを y 軸の正の方向に回転した方向になる。親指の方向、手前または奥が、この座標系での z 軸の正方向である。次の図は、これら 2 つの座標系を示している。

2 つの座標系

Microsoft® Direct3D® は左手座標系を使う。右手座標系に基づくアプリケーションを移植する場合は、Direct3D に渡すデータに 2 つの変更を加える必要がある。

  • 三角形の頂点の順序を反転し、システムが前から見て時計回りにたどれるようにする。つまり、頂点が v0、v1、v2 であるとすると、Direct3D に v0、v2、v1 として渡す。
  • ビュー行列を使用して、ワールド空間を z 軸方向に -1 だけスケーリングする。そのためには、ビュー行列に使う D3DMATRIX 構造体の _31、_32、_33、_34 の各メンバの符号を反転する

右手系に相当する座標系を取得するには、D3DXMatrixPerspectiveRH 関数および D3DXMatrixOrthoRH 関数を使って、射影トランスフォームを定義する。ただし、対応する D3DXMatrixLookAtRH 関数を使う場合は、背面カリングの順序を逆にし、その順序でキューブ マップをレイ アウトするよう注意すること。

左手座標系と右手座標系は最もよく使用される座標系システムだが、3D ソフトウェアでは、これらの座標系システム以外にもさまざまな座標系が使われることがある。たとえば、3D モデリング アプリケーションでは、y 軸がビューアの手前または奥を指し、z 軸が上方を指している座標系が使われることも珍しくない。この場合、右手座標系は、どの軸 (x、y、または z) の正方向もビューアに近づく方向として定義される。左手座標系は、どの軸 (x、y、または z) の正方向もビューアから離れる方向として定義される。z 軸が上方を指している左手座標系を使ったモデリング アプリケーションを移植する場合は、既に説明した手順に加え、頂点データをすべて回転する必要がある。

3D 座標系で定義されたオブジェクトにおいて重要な操作は、平行移動・回転・スケーリングである。これらの基本的なトランスフォームを組み合わせてトランスフォーム行列を作成できる。詳細については、「3D トランスフォーム」を参照すること。

これらの操作を組み合わせるとき、その結果はその操作の順序に依存すること、つまり行列を乗算する順序が重要であることに注意する。