LibGDX Перемещение повернутой камеры

Мы столкнулись с ситуацией в моем приложении, построенном с использованием LibGDX, где мне нужно, чтобы камера могла вращаться, а также была подвижной для пользователя, а также для возможности масштабирования. Моя камера управляет перемещением и масштабированием камеры, она прекрасно работает, однако, когда камера поворачивается, камера перемещается на основе этого вращения. Например, если камера повернута на 45 градусов влево, и пользователь перетаскивает вправо, чтобы переместить камеру, она переместится в верхний правый угол, потому что именно на нее теперь указывает правая сторона камеры. Вместо этого мне нужно, чтобы камера всегда двигалась относительно экрана / пользовательского ввода, независимо от его поворота.

У меня есть одно решение для этой проблемы, и это просто использовать "мировые координаты " позиционировать камеру, а не опираться накоординаты окна " Я пытаюсь использовать сейчас. Это создает очень неприятный пользовательский опыт, поскольку делает камеру довольно изменчивой и вызывает проблемы с моей системой масштабирования. Я предполагаю, что мог бы исправить эти проблемы с помощью множества настроек, однако, поскольку он намного более плавный, уже с использованием оконных координат, я бы действительно предпочел пойти по этому пути.

Я подозреваю, что есть элегантное решение этой, казалось бы, простой проблемы, где я мог бы сделать простой расчет на матрице или что-то в этом роде, однако моих знаний в OpenGL все еще недостаточно, и я не могу понять, что именно должно произойти починить это. Будем весьма благодарны за любые идеи от кого-то более опытного с OpenGL и всех этих матриц!

=== РЕДАКТИРОВАТЬ ===

Объекты, используемые для хранения значений, по сути, являются просто моей собственной версией Vector2, которая требовалась в другой части приложения. Я могу'Я не помню точных аргументов в пользу 0,7f, но, вероятно, это было только для того, чтобы снизить чувствительность движения, и проблема все еще будет сохраняться, если я уберу его.

camera.position.set(cameraStartPosition.getX() - ((zoomCurrentPosition.getX() - zoomStartPosition.getX()) * 0.7f), cameraStartPosition.getY() + ((zoomCurrentPosition.getY() - zoomStartPosition.getY())  * 0.7f), 0);

cameraStartPosition - координаты X и Y камеры, когда пользователь начинает ее перемещать.

zoomStartPosition - координаты X и Y начального касания, с которого начинается масштабирование.

zoomCurrentPosition - координаты X и Y, где касание, управляющее масштабированием, находится в данный момент.

Значения x и y в них взяты непосредственно из методов touchDown и touchDragged. Если я вместо этого размещу код, который устанавливает их после следующего кода, это создаст проблему, о которой я упоминал в оригинальном посте, где он движется так, как должен, но очень нестабильно.

    Vector3 vector = new Vector3(x, y, 0);
    camera.unproject(vector);
    x = (int) vector.x;
    y = CanvasAnywhereMain.HEIGHT - (int) vector.y;