説明したように、複数のヨーとピッチの回転を連結すると、ロールの回転が発生する可能性があります。しかし、ヨーとピッチの回転が厳密に乗算の順序で分離されている場合、これは起こらない。例えば。
Yaw1 * Yaw2 * Yaw3 * Pitch1 * Pitch2
最後にヨー回転が追加された場合にのみ問題が発生します。しかし、これを簡単に防ぐことができます:ヨー回転を追加する場合は、それを左に掛けます。ピッチローテーションを追加する場合は、ピッチローテーションを右に掛けます。私。現在のカメラ回転がR
である場合、すべてのヨー回転が同じ軸の周りにあるので
R = additionalYaw * R
又は
R = R * additionalPitch
、これらの変換は、実際に通勤します。したがって、どのような順序で表示されるかは関係ありません(同じ軸についての他のすべての回転にも同じです)。もちろん、順序を切り替えることもできます(つまり、最初にピッチを、次にヨー)。あなたが望むコントロールの種類に応じて。
CNutsも代替アプローチについて説明しました。変換階層がある場合は、カメラ変換用に2つのノードを持つことができます。次に、ヨー回転を一方の回転に加え、他方の回転にピッチ回転を加える。これは、上で説明したのと同じ効果をもたらし、異なる軸について回転を効果的に分離する。
これは、同じオブジェクトにロールバックさせるヨーとピッチを追加することによって発生する一般的な問題です。私はそれを修正する方法を正確に覚えていませんが、親としてオブジェクトを持たせ、そのオブジェクトをピッチなどのようにしてから、子供オブジェクトまたはその反対のヨーに適用する必要があります。ヨーとピッチを2つの異なるオブジェクトに分けると、それは機能するはずです。 – CNuts
2つのクォータニオンがあり、それらを合成するときのように、結果の四角形を取り、その軸をロール軸に投影し、それを使ってロールコンポーネントを取り除くことができるはずです。しかし、これは、関係する線形代数についての腸の感情に基づく、恥ずかしそうな答えです。 – Omnifarious