クォータニオンでの回転
DirectXで回転移動の研究をのまとめ
DirectXで回転移動をする時に使用するものが二種類あり
①Matrixでの回転移動
②Quaternionでの回転移動
Matrixでの回転移動
Matrixの中にある関数CreateRotataionYを使用してマトリックスを作成します。
ワールド座標にrotYを毎フレームかけて行います。
Matrixだけで回転を行うにはデメリットがあり、X軸とY軸とZ軸の回転を行う場合に
ジンバルロックが発生し、動けなくなることがあります。
ジンバルロックとは?
回転軸が重なってしまい特定の向きにしか回転できなくなる現象です。
解決策は?
クォータニオンを使用した回転を行うことです。
クォータニオンの利点
クォータニオンは任意な軸で回転することが出来て斜め移動や複雑な回転を実現出来ます。
クォータニオンの使用例
下記のプログラムは自機を敵が回転をして追いかけるものです。
手順としては
①敵のUpベクトルを求めて正規化
②自機と敵のターゲットベクトルと敵のUpベクトルを外積して正規化
③外積の結果でクォータニオンの軸を生成。(第2引数は動くスピード)
④軸をMatrixに変換してワールド座標に代入
この処理で自機を追跡する回転移動が出来ました。
まとめ
クォータニオンを使用しないMatrixの回転移動は簡単に出来て便利だが、拡張性が少ない
クォータニオンを使用すると任意の回転が出来るのでジンバルロックなどを気にせずに出来る
結論:回転移動を行う場合はクォータニオン使用した方がいい