Como posso reverter o efeito de uma matriz de transformação?

14

Eu tenho trabalhado recentemente em um jogo usando OpenGL e C ++ através do GLFW.

No jogo, tenho uma aeronave com uma torre montada nela. A aeronave se move em coordenadas espaciais mundiais e a torre a segue.

A torre possui seu próprio espaço de coordenadas para a direção da aparência / objetivo. Basicamente, quando a torre aponta na direção (0,0,1), ela é paralela à direção do movimento das aeronaves.

Para dar à torre um alvo espacial mundial, eu tenho uma matriz que pega as coordenadas espaciais mundiais e as transforma em coordenadas espaciais da torre.

À medida que a torre dispara, quero que ela projete projéteis no espaço mundial, existe uma maneira elegante de usar minha matriz de transformação para converter as coordenadas do espaço da torre de volta ao espaço mundial?

Uma maneira mais geral de fazer a pergunta pode ser: se eu tiver uma matriz Mque leve coordenadas de um espaço Apara o outro B. Existe uma maneira fácil de usar Mpara obter as coordenadas de Bpara A?

user1291510
fonte

Respostas:

19

Enquanto a matriz Mé invertible (que geralmente será, a menos que você está fazendo algo muito incomum), então o cálculo da matriz inversa de Mlhe dará uma matriz que faz o que quiser.

Ou seja, se Mrealiza alguma transformação, inverse(M)realiza a transformação "oposta".

A maioria das bibliotecas de matrizes / vetores fornece um meio para calcular o inverso.


fonte
1
Pergunta bônus (como você parece uma pessoa que saberia a resposta): Alguma matriz de transformação não-invertível produziria resultados visualmente interessantes?
user1306322
6
@ user1306322 Talvez. Projetar em uma dimensão mais baixa (por exemplo, zero todos os valores X) seria uma transformação não invertível, pois você está jogando fora os valores. É interessante no sentido de que é útil, mas não que você obtenha resultados interessantes. "Invertibilidade" e "visualmente interessante" são ortogonais.
congusbongus
@congusbongus nope! A projeção de 3D para 2D é um truque padrão para obter sombras nos receptores planares.
imallett
@ user1306322 Você pode estar interessado no pseudoinverso de Moore – Penrose
Tobias Kienzler
5

Se sua matriz de transformação for uma matriz de rotação, você poderá simplificar o problema aproveitando o fato de que o inverso de uma matriz de rotação é a transposição dessa matriz.

Se sua matriz de transformação representa uma rotação seguida por uma tradução, trate os componentes separadamente. O inverso é equivalente a subtrair a translação e depois aplicar a transposição da matriz de rotação.

Praxeolitic
fonte
2

Na sua matriz lib provavelmente existe uma função chamada inversa. Provavelmente é isso que você está procurando.

user55564
fonte