読者です 読者をやめる 読者になる 読者になる

落書きノート

ふと自分が気になった事を書いてます

DirectX マトリックスの表現

何もしないマトリックス

まず、何もしないマトリックスを紹介します。次のような、左上から右下の対角成分だけが「1」となっているマトリックスを座標値に適用しても、座標値はまったく変更されません。

directx9_do_not

例えば、(2,5,4)という座標値にこのマトリックスを掛けあわせた時の計算は、次のようになります。

directx_do_not_calc

何も変更されないことがわかると思います。このように、何もしないマトリックスのことを「アイデンティティマトリックス」、もしくは「単位行列」などといったりします。

移動のマトリックス

モデルを移動するマトリックスを作るには、何もしないマトリックスの1〜3列目の最下行にXYZ各軸それぞれの移動量を設定すれば良いです。

directx9_mat_move

例えば、原点(0,0,0)を点(2,1,0)に移動するマトリックスは、次のように表すことが出来ます。

directx9_mat_move_result

原点以外の座標値にこのマトリックスを適用すると、原点(0,0,0)から点(2,1,0)への移動と平行に移動されることになります。このことから、移動を行うマトリックスのことを「平行移動マトリックス」と呼ぶこともあります。

拡大縮小マトリックス

拡大縮小では、マトリックスの左上から3行✕3列の部分の対角成分のみを使用します。具体的には、左上から順にX軸方向、Y軸方向、Z軸方向の倍率に対応しています。

directx9_scale

例えば、モデルをX軸方向に2倍にするマトリックスは、次のように表現できます。

directx9_scale_2

回転マトリックス

モデルを回転するマトリックスを作るには、マトリックス左上の3行✕3列に以下のような値を設定します。「θ」は回転の角度です。

directx9_rotate_1directx9_rotate_2directx9_rotate_3

X軸、Y軸、Z軸それぞれによって、値を設定する位置が違うことに注意しましょう。