x、y、z 軸を中心とした回転という 3 つの角度を与える入力デバイスがあります。
ここで、これらの角度を使用して、ジンバル ロックなしで 3D 空間を回転させる必要があります。クォータニオンに変換できると思っていましたが、どうやらデータを 3 つの角度として取得しているので、これは役に立ちませんか?
その場合、入力データは単に x、y、z 軸の回転角度であることを念頭に置いて、スペースを正しく回転させるにはどうすればよいので、それを「回避」することはできません。同様に、軸の回転の順序を変更しても役に立ちません。とにかくすべての軸が使用されるため、順序を入れ替えても何も達成されません。しかし、確かにこれを行う方法があるに違いありませんか?
それが役立つ場合、問題はこの関数を実装することでかなり軽減できます。
void generateVectorsFromAngles(double &lastXRotation,
double &lastYRotation,
double &lastZRotation,
JD::Vector &up,
JD::Vector &viewing) {
JD::Vector yaxis = JD::Vector(0,0,1);
JD::Vector zaxis = JD::Vector(0,1,0);
JD::Vector xaxis = JD::Vector(1,0,0);
up.rotate(xaxis, lastXRotation);
up.rotate(yaxis, lastYRotation);
up.rotate(zaxis, lastZRotation);
viewing.rotate(xaxis, lastXRotation);
viewing.rotate(yaxis, lastYRotation);
viewing.rotate(zaxis, lastZRotation);
}
ジンバルロックを回避する方法で。