私は現在、学校での実習のためにコーディングしているゲーム エンジン内にスケルトン アニメーションのセットアップを実装しようとしています。エンジンは、右利きのシステムを使用して、c++ および directx 10 でコーディングされています。
現在、メッシュのインポートとロードにcolladaを使用しています(これが利用可能な最良のソリューションではないことはわかっています)。私が使用しているセットアップでは、GPU スキニングのためにデータを GPU に渡す直前に行列に変換する回転にクォータニオンを使用しています。ソフトイメージを使用してテスト メッシュを作成し、アニメーション コードのさまざまな側面をテストしています。
私が抱えている問題は、回転値に関してです。D3DXQuaternionRotationYawPitchRoll を使用して、回転値をオイラー角からクォータニオンに変換しています。これに関する問題は、現在、アニメーションが間違った軸にあることです。y 軸を中心とした回転であるべきものは、x 軸を中心とした回転です。適切にアニメーション化するには、x 値と y 値を交換し、y 値を無効にする必要があります。これは、枝のある単純な押し出しボックスにあります。アニメーション化されたボーンごとに、ローカル変換マトリックス (回転マトリックスに並進マトリックスを掛けたもの) を現在計算しています。次に、親マトリックスに現在のローカル マトリックスを掛けて、親に対する最終的な変換マトリックスを取得します。
コラーダのローテーションを適切に処理する秘訣はありますか? 私がチェックしたものはすべて、各ボーンに親を掛ける前に値が正しいことを示しています。行列乗算の順序を入れ替えても、顕著な改善は見られませんでした。現在、サークルでの実行に多くの時間を費やしているため、その間にエンジンの他のセクションに取り組みます。