Як я можу повернути ефект матриці перетворення?


14

Я нещодавно працюю над грою з використанням OpenGL та C ++ через GLFW.

У грі у мене дирижабль із турецькою баштою. Дирижабль рухається навколо світових космічних координат, а вежа «йде за ним».

У башти є власний координатний простір для її напрямку погляд / мета. В основному, коли башта спрямована в напрямку (0,0,1), вона спрямована паралельно напрямку дирижаблів руху.

Щоб надати башті світову космічну ціль, у мене є матриця, яка приймає координати світового простору та перетворює їх на координати баштового простору.

Коли башточка спрацьовує, я хочу, щоб вона породила снаряди у світовому просторі, тож чи є елегантний спосіб використання моєї матриці перетворення для перетворення координат баштового простору назад у світовий простір?

Більш загальним способом задати питання може бути: якщо у мене є матриця, Mяка бере координати від простору Aдо простору B. Чи є простий спосіб використовувати Mдля отримання координат від Bдо A?

Відповіді:


19

До тих пір , як матриця Mє оборотною (який зазвичай буде, якщо ви робите що - то дуже незвичайне), то обчислення зворотної матриці з Mдасть вам матрицю , яка робить те , що ви хочете.

Тобто, якщо Mвиконує якесь перетворення, inverse(M)здійснює «протилежне» перетворення.

Більшість матричних / векторних бібліотек забезпечують засоби для обчислення зворотного.


1
Питання про бонус (як ви здаєтеся людині, яка б знала відповідь): Чи могли б будь-які незворотні матриці перетворення давати візуально цікаві результати?
user1306322

6
@ user1306322 Можливо. Проектування на нижчий вимір (наприклад, нуль всіх значень X) було б непереверненим перетворенням, оскільки ви викидаєте значення. Це цікаво в тому сенсі, що це корисно, але не те, що ви отримаєте прикольні результати. "Інвертивність" та "візуально цікаві" є ортогональними.
congusbongus

@congusbongus nope! Проекція від 3D до 2D - це стандартний хак, щоб отримати тіні крапель на плоских приймачах.
imallett

@ user1306322 Можливо, вас зацікавить псевдоінверс Мура – ​​Пенроуза
Тобіас Кіенцлер

5

Якщо ваша матриця перетворення є матрицею обертання, то ви можете спростити проблему, скориставшись тим фактом, що зворотна матриця обертання є транспозицією цієї матриці.

Якщо ваша матриця перетворення являє собою обертання з подальшим перекладом, то обробіть компоненти окремо. Зворотне еквівалентно відніманню перекладу та застосуванню транспозиції матриці обертання.


2

У вашій матриці lib, ймовірно, функція, яка називається зворотною. Це, мабуть, те, що ви шукаєте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.