Platform SDK: DirectX |
行列を使用する主な利点の 1 つは、複数の行列を乗算してそれらのエフェクトを組み合わせることができるということである。つまり、モデルを回転し、次に別の位置座標に移動する場合、2 つの行列を適用する必要はない。その代わり、回転行列と平行移動行列を乗算して、すべてのエフェクトを持つ合成行列を生成する。この処理は行列連結と呼ばれ、次の公式で記述できる。
この公式では、C は作成する合成行列で、M1 〜 Mn は行列 C に含まれる個々のトランスフォームである。ほとんどの場合、2 つまたは 3 つの行列を連結するが、数に制限はない。
C++ アプリケーションでは、DirectX SDK. に付属する D3dmath.cpp ソース ファイルを使用できる。このファイルには行列を乗算する D3DMath_MatrixMultiply ヘルパー関数がある。Visual Basic アプリケーションの場合は、この SDK に付属する Math.bas ファイルの MatrixMult サブルーチンを使用できる。
行列を乗算するときは順序に注意する。この順序は重要である。上の公式は、行列連結の "左から右" 規則を反映している。つまり、合成行列を作成するために使用する行列の視覚エフェクトは、左から右の順で現われる。一般的なワールド トランスフォーム行列の例を次に示す。お決まりの "空飛ぶ円盤" 用のワールド トランスフォーム行列を作成すると仮定する。UFO をその中心 (モデル空間の y 軸) を軸として回転し、シーン内の任意の位置座標に移動する。このエフェクトを実現するには、次の式のように、まず平行移動行列を作成し、次にこの行列を回転行列で乗じる。
この公式では、Ry は y 軸を中心に回転する行列で、Tw はワールド座標の任意の位置座標への平行移動である。
これらの行列を乗算する順序は重要である。2 つのスカラー値を乗算する場合とは異なり、行列の乗算は可換的ではない。平行移動行列と回転行列を逆の順序で乗算すると、UFO がワールド空間位置座標に移動してから、ワールド座標の原点を中心に回転するというエフェクトが生じてしまう。
どのような行列を作成する場合でも、期待どおりのエフェクトを実現するためには "左から右" 規則を忘れてはならない。