Jak mogę odwrócić efekt macierzy transformacji?

14

Ostatnio pracuję nad grą z wykorzystaniem OpenGL i C ++ za pośrednictwem GLFW.

W grze mam sterowiec z zamontowaną wieżą. Sterowiec porusza się po światowych współrzędnych kosmicznych, a wieża „podąża” za nim.

Wieża ma własną przestrzeń współrzędnych dla swojego wyglądu / kierunku celowania. Zasadniczo, gdy wieża celuje w kierunku (0,0,1), jest skierowana równolegle do kierunku ruchu sterowców.

Aby nadać wieżyczce cel przestrzeni kosmicznej, mam macierz, która przyjmuje współrzędne przestrzeni świata i przekształca je we współrzędne przestrzeni kosmicznej.

Gdy strzelasz z wieży, chcę, aby odradzała pociski w przestrzeni świata, więc czy istnieje elegancki sposób wykorzystania mojej macierzy transformacji do konwersji współrzędnych przestrzeni wieży z powrotem na przestrzeń świata?

Ogólniejszym sposobem zadawania pytań może być: jeśli mam macierz, Mktóra przenosi współrzędne z przestrzeni Ado przestrzeni B. Czy istnieje prosty sposób Mna uzyskanie współrzędnych od Bdo A?

użytkownik1291510
źródło

Odpowiedzi:

19

Tak długo, jak macierz Mjest odwracalna (co zwykle będzie, chyba że robisz coś bardzo nietypowego), wtedy obliczaj odwrotności macierzy o Mdaje macierz, że robi to, co chcesz.

To znaczy, jeśli M wykona jakąś transformację, inverse(M)wykona transformację „przeciwną”.

Większość bibliotek macierzowych / wektorowych zapewnia środki do obliczania odwrotności.


źródło
1
Dodatkowe pytanie (jak się wydaje, że ktoś zna odpowiedź): Czy jakiekolwiek nieodwracalne matryce transformacji przyniosą ciekawe wizualnie rezultaty?
user1306322,
6
@ user1306322 Może. Rzutowanie na niższy wymiar (np. Zero wszystkich wartości X) byłoby nieodwracalną transformacją, ponieważ wyrzucasz wartości. Jest interesujący w tym sensie, że jest użyteczny, ale nie dlatego, że uzyskasz efektowne wyniki. „Odwracalność” i „interesujący wizualnie” są ortogonalne.
congusbongus,
@congusbongus nope! Projekcja z 3D na 2D to standardowy hack pozwalający uzyskać cienie na odbiornikach planarnych.
imallett,
@ user1306322 Być może interesuje Cię pseudoinwersja Moore – Penrose
Tobias Kienzler,
5

Jeśli macierz transformacji jest macierzą obrotu, można uprościć problem, wykorzystując fakt, że odwrotność macierzy obrotu jest transpozycją tej macierzy.

Jeśli macierz transformacji reprezentuje obrót, po którym następuje translacja, należy traktować komponenty osobno. Odwrotność jest równoważna odjęciu translacji, a następnie zastosowaniu transpozycji macierzy obrotu.

Prakseolityczny
źródło
2

W twojej bibliotece macierzy prawdopodobnie znajduje się funkcja o nazwie odwrotna. Prawdopodobnie tego właśnie szukasz.

użytkownik55564
źródło