DXライブラリ + VS2010 でとりあえず3Dモデルを表示して、
←,→キーで3Dモデルを回転させ、
↑キーで3Dモデルからみた正面の方向に進ませたいのですが、どうしてもまっすぐ進みません。
0,0,0を基準に回転するようになったり(大きく0,0,0の周りを回るような感じ)
移動してもワールド座標からみたZ軸にしか動かなかったりします。
たぶん行列についてまだ理解していないからだと思うのですが、
出来ればヒントとか教えてくれると幸いです。
以下コード
//RX = モデルの回転量 0~360
//RADto = #define RADto(x) ((x)*PHI_F/180.0f)
//MH_M4 = 3Dモデル
//V_M4 = 3Dモデル座標を格納しているVECTOR
//m1 , m2 , m3 = Matrix
//モデルデータは0,0,-100.0fを初期位置にしています
while(ProcessMessage() == 0 && ScreenFlip() == 0 && ClearDrawScreen() == 0 && GetHitKeyStateAll(key) == 0)
{
//メインループ開始
DrawFillBox(0,0,800,600,GetColor(0,150,255));
//テンキーによる移動
if (RX>=360) RX=0;
if (RX<=-360) RX=0;
if (key[KEY_INPUT_LEFT] == 1) RX-=3.0f;
if (key[KEY_INPUT_UP] == 1) V_M4.z-=10.0f;
if (key[KEY_INPUT_RIGHT] == 1) RX+=3.0f;
if (key[KEY_INPUT_DOWN] == 1) V_M4.z+=10.0f;
m1 = MGetTranslate(VGet(0,0,0));
m2 = MGetRotY(RADto(RX));
m3 = MMult(m1,m2);
MV1SetMatrix(MH_M4,m3);
MV1DrawModel(MH_M4);
SetCameraPositionAndTarget_UpVecY(VGet(0,0,-500.0f),VGet(0,0,0));
}