我试图计算我的二维相机的模型视图矩阵,但我无法得到正确的公式。 我使用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)也在屏幕中心)。我该如何实现呢?
请注意,我还设置了一个正交投影矩阵,可能会影响这个问题。