Recientemente he estado trabajando en un juego con OpenGL y C ++ a través de GLFW.
En el juego tengo una aeronave con una torreta montada. La aeronave se mueve en coordenadas espaciales mundiales y la torreta 'la sigue'.
La torreta tiene su propio espacio de coordenadas para su dirección de mira / objetivo. Básicamente, cuando la torreta apunta en dirección (0,0,1)
, apunta paralela a la dirección de movimiento de las aeronaves.
Para darle a la torreta un objetivo espacial mundial, tengo una matriz que toma coordenadas espaciales mundiales y las transforma en coordenadas espaciales de torreta.
A medida que se dispara la torreta, quiero que genere proyectiles en el espacio mundial, entonces, ¿hay una manera elegante de usar mi matriz de transformación para convertir las coordenadas del espacio de la torreta en espacio mundial?
Una forma más general de hacer la pregunta podría ser: si tengo una matriz M
que toma coordenadas de espacio A
en espacio B
. ¿Hay una manera fácil de usar M
para obtener las coordenadas de B
a A
?
fuente
Si su matriz de transformación es una matriz de rotación, entonces puede simplificar el problema aprovechando el hecho de que el inverso de una matriz de rotación es la transposición de esa matriz.
Si su matriz de transformación representa una rotación seguida de una traslación, trate los componentes por separado. El inverso es equivalente a restar la traslación y luego aplicar la transposición de la matriz de rotación.
fuente
En su matriz lib probablemente hay una función llamada inversa. Eso es probablemente lo que estás buscando.
fuente