まずは移動するためのベクトルを用意します。
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行列を用意せずに済んだので、メモリの節約にもなりますね。