OpenGL, обратное преобразованиям

#matrix #opengl #transformation

Вопрос:

Если у меня есть 3 разные матрицы, одна для вращения (R), одна для перевода(T) и одна для масштабирования (S), как добиться обратного эффекта этих матриц, манипулируя той, которая их вызвала?

До сих пор я понял, что если я перенесу матрицу вращения, я достигну того, чего хочу (правильно ли это?). А как насчет двух других? И если есть общий способ, есть ли какие-то особые случаи, когда этих способов будет недостаточно?

Ответ №1:

Обратная матрица вращения R действительно является ее транспонированием R T.

Обратная матрица масштабирования S проста, так как она содержит только диагональные элементы (первые три строки, так как последняя строка всегда равна (0 0 0 1) ).

Поэтому вы просто заменяете каждую диагональ s i на 1/s i.

Наконец, матрица перевода T является идентификационной матрицей с вектором перевода в последнем столбце. Обратное достигается заменой этих элементов на их отрицательные.

Также обратным произведению 3 матриц является обратное произведение

(S T R)-1 = R-1 T-1 S-1

Комментарии:

1. Спасибо за ваш ответ, а как насчет особых случаев, когда эти операции приведут не к обратному эффекту, а к другому странному эффекту. Я спрашиваю только потому, что нашел этот вопрос в листе упражнений.

2. Я не понимаю. О каком еще странном эффекте вы говорите?

3. я действительно не знаю , вопрос просто гласит: «как добиться обратного эффекта и каковы особые случаи, когда вашего решения будет недостаточно?