座標系 (Direct3D 9)

通常、3D グラフィックス アプリケーションでは、左利きと右利きの 2 種類のデカルト座標系が使用されます。 いずれの座標系においても、x 軸の正の向きは右を指し、y 軸の正の向きは上を指します。 どちらの方向を z 軸の正の向きが指しているかは、左手または右手の指で x 軸の正の向きを指し、指を y 軸の正の向きに曲げることによって、思い出すことができます。 親指が指している方向は、自身に向かうかまたは離れる方向のいずれかとなり、その座標系の z 軸の正の向きが指す方向となります。 次の図は、これらの 2 つの座標系を示しています。

illustration of the left-handed and right-handed cartesian coordinate systems

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

  • 三角形頂点の順序を反転させて、システムがそれらの三角形頂点を正面から時計方向にトラバースするようにします。 つまり、頂点が v0、v1、v2 とすると、それらを Direct3D に v0、v2、v1 として渡します。
  • ビュー行列を使用し、ワールド空間で z 方向に -1 のスケーリングを適用します。 これを行うには、ビュー マトリックスに使用する D3DMATRIX 構造体の _31、_32、_33、および _34 メンバーの符号を反転します。

右利きの世界に対する量を取得するには、 D3DXMatrixPerspectiveRH 関数と D3DXMatrixOrthoRH 関数を使用してプロジェクション変換を定義します。 ただし、対応する D3DXMatrixLookAtRH 関数を使用し、バックフェイスカリング順序を反転させ、それに応じてキューブ マップをレイアウトするように注意してください。

左手および右手座標が最も一般的な座標系ですが、さまざまな他の座標系が 3D ソフトウェアで使用されています。 たとえば、y 軸がビューアーに向かうかまたはビューアーから離れる方向を指し、かつ z 軸が上を指す座標系を使用することも、3D モデリング アプリケーションでは珍しくはありません。

正式には、一連の基底ベクトル(すなわち座標系)の向きは、特定の基底ベクトルのセットによって定義される行列の決定要因を計算することによって見つけることができます。 決定要因が正の場合、基礎は "肯定的" 指向 (または右利き) と言われます。 決定要因が負の場合、基礎は "負の" 方向 (または左利き) と言われます。 決定要因の詳細については、線形代数リソースを参照してください。

非公式には、"右/左手ルール" を使用して、特定の一連の基底ベクトルが右または左手の座標系を形成するかどうかを判断できます。

3D 座標系で定義されているオブジェクトに対して実行される基本的な操作は、平行移動、回転、およびスケーリングです。 これらの基本的な変換を組み合わせて、変換マトリックスを作成することができます。 詳細については、「 変換 (Direct3D 9)」を参照してください。

これらの演算を組み合わせると、結果は非可換です。行列を乗算する順序が重要です。

座標系とジオメトリ