2D カメラのモデル ビュー マトリックスを計算しようとしていますが、式を正しく取得できません。行列が OpenGL と互換性があるように、Affine3f 変換クラスを使用します。これは、私が試行錯誤して得たものに最も近いものです。このコードはカメラの回転とスケーリングを正常に行いますが、平行移動と回転を同時に適用すると、カメラの動きがおかしくなり、カメラが回転した形で動きます。(これはおそらく、最初に回転行列を適用してから変換したためです)
Eigen::Affine3f modelview;
modelview.setIdentity();
modelview.translate(Eigen::Vector3f(camera_offset_x, camera_offset_y, 0.0f));
modelview.scale(Eigen::Vector3f(camera_zoom_x, camera_zoom_y, 0.0f));
modelview.rotate(Eigen::AngleAxisf(camera_angle, Eigen::Vector3f::UnitZ()));
modelview.translate(Eigen::Vector3f(camera_x, camera_y, 0.0f));
[loadmatrix_to_gl]
私が欲しいのは、カメラがスクリーンスペースのオフセット位置を中心に回転およびスケーリングし、{(0,0) はこの場合はスクリーンの中央です}、ワールドスペースのグローバル xy 軸に沿って配置されることです {(0,0) も最初は画面の中央} から最終的な位置まで。どうすればいいですか?
この問題に影響を与える可能性のある正投影行列も設定したことに注意してください。