我正在尝试计算我的 2D 相机的模型视图矩阵,但我无法正确计算公式。我使用 Affine3f 变换类,因此矩阵与 OpenGL 兼容。这是我通过反复试验得到的最接近的。这段代码可以旋转和缩放相机,但是如果我同时应用平移和旋转,相机的运动就会变得混乱:相机以旋转的方式移动,这不是我想要的。(这可能是因为我首先应用旋转矩阵然后平移)
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) 也是初始在屏幕中间} 到最终位置。我该怎么做?
请注意,我还设置了一个正交投影矩阵,这可能会影响这个问题。