Platform SDK: DirectX |
3D グラフィックスを処理するプログラムでは、ジオメトリ トランスフォームを使用して次のことができる。
4×4 行列を使用すると、任意の点を別の点にトランスフォームできる。次の例では、行列を使用して点 (x, y, z) をトランスフォームし、新しい点 (x', y', z') を生成する。
(x, y, z) に対する次の操作と行列を実行して点 (x', y', z') を生成する。
最も一般的なトランスフォームは、平行移動、回転、およびスケーリングである。これらのエフェクトを生成する行列を組み合わせて単一の行列を作成し、いくつかのトランスフォームを同時に計算できる。たとえば、一連の点を移動して回転させる単一の行列を作成できる。詳細については、「行列連結」を参照すること。
行列は、行と列の順序で記述する。頂点を各軸に対して均一にスケーリングする (一様なスケーリングと呼ばれる) 行列は、数学的には次のように表記される。
C++ の場合、Direct3D 直接モードでは、D3DMATRIX 構造体を使用して行列を 2 次元配列として宣言する。次の例は、一様なスケーリングを行う行列として機能するように D3DMATRIX 構造体を初期化する方法を示す。
D3DMATRIX scale = { D3DVAL(s), 0, 0, 0, 0, D3DVAL(s), 0, 0, 0, 0, D3DVAL(s), 0, 0, 0, 0, D3DVAL(1) };
Visual Basic の場合、Direct3D 直接モードでは、D3DMATRIX 型を使用して 2 次元配列として宣言された行列を使用する。次の例は、一様なスケーリングを行う行列として機能するように D3DMATRIX 型を初期化する方法を示す。
Dim ScaleMatrix As D3DMATRIX ' この例では、s は Single 型の変数である With ScaleMatrix .rc11 = s .rc22 = s .rc33 = s .rc44 = 1 End With