Share via


座標系 (Direct3D 9)

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

Two 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 モデリング アプリケーションでは珍しくはありません。

正式には、1 組みの基底ベクトルの方向 (つまり座標系) は、特定の基底ベクトルによって定義される行列の行列式を計算することによって求めることができます。行列式が正である場合、基底は「正の」向き (または右手系) であると言います。行列式が負である場合、基底は「負の」向き (または左手系) であると言います。行列式の説明については、線形代数の資料を参照してください。

便宜的には「右/左手の法則」を使用して、特定の基底ベクトルが右手座標系と左手座標系のどちらを形成するかを判断できます。

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

これらの操作を組み合わせると、結果は可換的ではなくなり、行列を乗算する順序が重要となります。