私はゲーム エンジンに取り組んできましたが、最近、ビュー マトリックスを管理するための Camera クラスを簡単に作成できるようになりました (または別のエンジンに簡単に切り替えることができます)。私はそれが何をしなければならないかを概念的に知っていますが、私が問題を抱えているのは、ローカル原点を中心に回転する方法を理解することです(ビューマトリックスの場合、回転マトリックスに乗算される変換マトリックスと同じになります)。
ダイレクトモードでは、
glTranslatef(x, y, z); //move back to origin
glRotatef(angle, x_rot, y_rot, z_rot); //turn using a quaternion
glTranslatef(-x, -y, -z); //move back to original location
しかし、それがより現代的なアプリケーションにどのように変換されるかはわかりません。基本的に同じことを行い、平行移動行列を原点に戻し、回転させ、逆方向に移動しますか? 回転させたいオブジェクトごとに?これまでにテストしたことから、その方法は表示には機能しますが、3D 空間でそれを制御するのは扱いにくいです (回転を常に調整する方法がわかりません。動きのコンポーネントを単一の vec4 に変換し、回転を乗算し、平行移動に適用してから、実際の回転を行いますか?)
私が見逃している4x4行列の乗算を3つ以上行うよりも効率的な方法があるようです。
提案された解決策を試した後の特定のセクションは次のとおりです。