Я пытаюсь рассчитать матрицу просмотра модели моей 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) также Initialy в середине экрана} до конечной позиции. Как бы я это сделал?
Обратите внимание, что я также настроил матрицу орфографической проекции, которая может повлиять на эту проблему.