LibGDX moviendo una cámara rotada

He llegado a una situación en mi aplicación, construida con LibGDX, donde necesito que la cámara pueda girar, y que el usuario también pueda moverla, además de poder hacer zoom. Los controles de mi cámara para mover y hacer zoom en la cámara funcionan a la perfección, sin embargo, cuando se gira la cámara, la cámara se mueve en función de esa rotación. Por ejemplo, si la cámara se gira 45 grados hacia la izquierda y el usuario arrastra hacia la derecha para moverla, se moverá hacia la parte superior derecha, porque ahí está el lado derecho de la cámara que ahora apunta. En su lugar, necesito que la cámara se mueva siempre en relación con la pantalla / entrada del usuario, independientemente de su rotación.

Tengo una solución para este problema, y ​​es simplemente usar "coordenadas mundiales" para posicionar la cámara, en lugar de basarla en las "coordenadas de la ventana" que estoy tratando de usar ahora. Sin embargo, esto crea una experiencia de usuario muy desagradable, ya que hace que la cámara sea bastante entrecortada y cause problemas con mi sistema de zoom. Supongo que podría solucionar esos problemas con muchos ajustes, sin embargo, debido a que es mucho más suave al usar las coordenadas de la ventana, realmente preferiría ir por esa ruta.

Sospecho que hay una solución elegante para este problema aparentemente simple, en el que podría hacer un cálculo simple en una matriz o algo así, sin embargo, mi conocimiento de OpenGL todavía es bastante escaso y parece que no puedo descubrir qué es exactamente lo que debe suceder. arreglarlo. ¡Cualquier idea de alguien más adepto con OpenGL y todas estas matrices sería muy apreciada!

=== EDIT ===

Los objetos utilizados para mantener los valores aquí son esencialmente mi propia versión de Vector2, que se requería en una parte diferente de la aplicación. No puedo recordar exactamente el razonamiento exacto para el 0.7f allí, pero presumiblemente fue solo para disminuir la sensibilidad del movimiento, y el problema aún persiste si lo elimino.

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

cameraStartPosition: las coordenadas X e Y de la cámara cuando el usuario comienza a moverla.

zoomStartPosition: las coordenadas X e Y del toque inicial que inicia el zoom

zoomCurrentPosition: las coordenadas X e Y donde el toque que controla el zoom actualmente es

Los valores de x e y se toman directamente de los métodos touchDown y touchDragged. Si, en cambio, coloco el código que los establece después del siguiente código, crea el problema que mencioné en la publicación original, donde se mueve como debería, pero muy entrecortado.

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta