Tengo una configuración de ThreeJS en la que la cámara puede moverse a través de un mundo 3D y, mientras se mueve, cambiará su lookAt varias veces. Así que supongamos que camera.getWorldDirection() siempre será más o menos aleatorio.
Ahora necesito que la cámara se mueva exactamente hacia la izquierda/derecha/arriba/abajo en relación con camera.getWorldDirection() .
No puede simplemente usar algo como camera.position.x += 1 porque eso solo se aplica a una dirección mundial de Vector3(0, 0, -1) . Si la dirección del mundo cambia a, por ejemplo (1, -1, 0) , mover la cámara hacia la derecha requiere cambios en los ejes X y Z.
Eché un vistazo a los cuaterniones y las matrices 4D, pero no puedo entenderlos con mi cerebro de mono. Sería muy bueno si alguien pudiera ayudarme.
Aquí hay una demostración: https://normanwink.com/demo/room/
Encontré la respuesta aquí en una respuesta no aceptada.
Tienes que usar camera.translateX() y funciones similares para transformar su posición local. De esa manera, siempre puede manipular la posición de la camera.position para moverla y tener las funciones de translate para agregar compensaciones relativas al ángulo de visión de las cámaras.