準備するもの
FLOAT fRotX = 0.0f, fRotY = 0.5f, fRotZ = 0.3f; //回転用変数
■使い方
D3DXMATRIXA16 matWorld; //ワールド行列 D3DXMATRIXA16 matRotation; //回転行列 D3DXMatrixIdentity(&matWorld); //初期化 /* 回転行列を作成する */ //X軸 D3DXMatrixRotationX(&matRotation, fRotX); D3DXMatrixMultiply(&matWorld, &matWorld, &matRotation); //Y軸 D3DXMatrixRotationY(&matRotation, fRotY); D3DXMatrixMultiply(&matWorld, &matWorld, &matRotation); //Z軸 D3DXMatrixRotationZ(&matRotation, fRotZ); D3DXMatrixMultiply(&matWorld, &matWorld, &matRotation); //ワールドへセット m_pDevice->SetTransform(D3DTS_WORLD, &matWorld);
D3DXMatrixRotation関数の第二引数はラジアンです。そこを間違えない様に・・・。 また、D3DXには角度をラジアンに変換してくれる関数D3DXToRadian()があるので
D3DXMatrixRotationX(&matRotation, D3DXToRadian(fRotX));
という風に渡すことも出来ます。また、前回の移動と回転の両方を適応させたい場合は
D3DXMatrixMultiply(&matWorld, &matWorld, &matRotation); D3DXMatrixMultiply(&matWorld, &matWorld, &matPosition); m_pDevice->SetTransform(D3DTS_WORLD, &matWorld);
とします。これは「回転した後に移動」させています。この積順が逆になると結果も全く 別物になってしまいます。ワールドに複数の行列を適用する際は順番に気を付けましょう。