落書きノート

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

基本的な座標変換を行うプログラム

モデルの移動

移動マトリックスを生成し、モデルに適用する方法を説明します。

今回のサンプルプログラムでは、まずD3DXMatrixIdentity()関数を使って何もしないマトリックスを生成した後、D3DXMatrixTranslation()関数を使って生成したマトリックスの成分を変更するという手順を踏んでいます。実は、この場合はD3DXMatrixIdentity()関数を呼び出す必要はないですが、発見のしにくい初期化し忘れを原因としたバグを避けるためには、このように常にマトリックスを初期化するようにした方が良いです。

// 何もしないマトリックスの生成
D3DXMatrixIdentity(&m_world);

// 移動のためのマトリックス
D3DXMatrixTranslation(&m_world, 4.0f, 0.0f, 0.0f);

D3DXMatrixTranslation()の第1引数には変更を加えるマトリックスのアドレスを、第2〜第4引数にはX,Y,Z軸それぞれの移動量をfloat型で指定する。ここでは、モデルをステージの右の方向、つまりX軸のプラス方向へ4だけ移動するように設定しているというわけです。

このマトリックスを、何もしないマトリックスのときと同じようにレンダリングパイプラインに設定すると、中央よりやや右寄りにモデルが表示されることになります。

もちろん、D3DXMatrixTranslation()にはX,Y,Z軸それぞれの移動量を同時に設定することも出来ます。例えば、次のように設定すると、モデルが座標(2, 3, 1)へ移動することになります。

D3DXMatrixTranslation(&m_world, 2.0f, 3.0f, 1.0f);

directx_chap03_03_translate