前提・実現したいこと
フライトシミュレータでワールドではなくローカルで'A','D'でロール回転を、'W','S'でピッチ回転をしてほしい
わかりにくい部分もあるかと思いますが、ヒントやアドバイスだけでもお待ちしております。何卒よろしくお願いいたします。
発生している問題・エラーメッセージ
ピッチ回転がローカル軸で回転させているつもりがワールド軸で回転してしまう
該当のソースコード
C++
1 // プレイヤー(kbはキーボードの入力を取得する) 2 pitch += D3DXToRadian((float)(kb.On('S') - kb.On('W'))*rotSpeed); 3 roll += D3DXToRadian((float)(kb.On('A') - kb.On('D'))*rotSpeed); 4 5 // プレイヤーの回転 6 D3DXMatrixRotationYawPitchRoll(&local, yaw, pitch, roll); 7 8 // プレイヤーの回転後の軸を取得 9 D3DXVECTOR3 axis[3] = { 10 {1,0,0},//X 11 {0,1,0},//Y 12 {0,0,1},//Z 13 }; 14 D3DXVECTOR4 outAxis[3] = {}; 15 D3DXVec3TransformArray(outAxis, sizeof(D3DXVECTOR4), axis, sizeof(D3DXVECTOR3), &local, 3); 16 17 // Quaternion作成 18 D3DXQUATERNION qX,qY, qZ,qFinal; 19 D3DXVECTOR3 x(outAxis[0].x, outAxis[0].y, outAxis[0].z), z(outAxis[2].x, outAxis[2].y, outAxis[2].z); 20 21 // 回転後の軸で任意軸回転させる 22 D3DXQuaternionRotationAxis(&qX, &x, pitch); // PitchQuaternion 23 D3DXQuaternionRotationAxis(&qZ, &z, roll); // RollQuaternion 24 25 // 合成 26 qFinal = qZ * qX; 27 28 // アフィン変換 29 D3DXMatrixAffineTransformation(&world, 1.f, &D3DXVECTOR3(0, 0, 0), &qFinal, &pos); 30
試したこと
world行列の._11,._12,._13をX軸としてQuaternionを作成してみたり、yaw軸のQuaternionも作成して合成したがうまくいかず。
補足情報(FW/ツールのバージョンなど)
DirectX(June2010)
VisualStudio 2017 ver 15.8.1
回答1件
あなたの回答
tips
プレビュー