ゲームプログラムのメモ書き

DirectX

移動してみよう〜

まずは移動するためのベクトルを用意します。

D3DXVECTOR3      vecPosition(0, 0, 0);   //移動ベクトル

■使い方

D3DXMATRIXA16    matWorld;      //ワールド行列
D3DXMATRIXA16    matPosition;   //移動行列
D3DXMatrixIdentity(&matWorld);  //初期化

//移動行列を作成
D3DXMatrixTranslation(&matPosition,
    vecPosition.x,  //X座標
    vecPosition.y,  //Y座標
    vecPosition.z); //Z座標

//D3DXMatrixMultiPlay:行列の積を返す関数
//matWorld *= matPositionと同じ結果になる
D3DXMatrixMultiply(&matWorld, &matWorld, &matPosition);

//ワールドへセット
m_pDevice->SetTransform(D3DTS_WORLD, &matWorld);

D3DXMatrixTranslation関数で移動行列を作成し、matWorldに掛けます。 その後掛けた結果matWorldをSetTransformにセットします。






■別の方法 〜 掛け算を使わない 〜
一般的に掛け算、割り算は重いので、出来る限り回数を減らしたいところです。
そこで、行列の特徴を生かした計算をします。

D3DXMATRIXA16    matWorld;      //ワールド行列
D3DXMatrixIdentity(&matWorld);  //初期化

//移動ベクトルをセット
matWorld._41 = vecPosition.x;
matWorld._42 = vecPosition.y;
matWorld._43 = vecPosition.z;

//ワールドへセット
m_pDevice->SetTransform(D3DTS_WORLD, &matWorld);

こうすることで、matPositionを掛けずに同じ結果を得ることが出来ます。
また、matPosition行列を用意せずに済んだので、メモリの節約にもなりますね。