Transformaciones inversas, inversión de matrices
En programación 3D en tiempo real es imprescindible optimizar todo lo posible, y la inversión de matrices homogéneas es uno de los casos complejos (aparentemente) en donde se puede conseguir una excelente optimización siguiendo las reglas del álgebra matricial y conociendo cómo ha sido generada la matriz a invertir (conociendo su estructura).
Nota: En este post usaré el formato fila (pre-multiplicación) para representar las matrices y la formulación.
Vamos a ver primero la inversión aislada de los tres casos básicos, matriz de rotación, escala y traslación:
Si la matriz de rotación R es ortogonal (si sus tres ejes son perpendiculares entre si), entonces su inversa es simplemente su traspuesta:
La inversa de una matriz de escala S es muy sencilla:
Y la inversa de una matriz de traslación T también es muy simple:
Ahora veamos un caso más práctico, cómo invertir una matriz de transformación RT (es decir, una matriz que primero realiza una rotación y luego una traslación). Es imprescindible saber siempre el orden de las transformaciones contenidas en una matriz para poder optimizar el cálculo de su inversa ya que vamos a optimizar los cálculos por partes y siguiendo una regla muy simple; la inversa del producto de dos matrices es igual al producto invertido de las inversas de dichas matrices:
Con esta regla tan simple podemos invertir una matriz RT multiplicando la inversa de la traslación por la inversa de la rotación: y como ya sabemos que la inversa de una matriz ortogonal es su traspuesta la fórmula final será:
Con lápiz y papel calculamos la estructura final de la matriz inversa de una transformación RT:
Para invertir una matriz TR es incluso más simple:
Ahora veremos cómo invertir matrices que incluyen transformaciones de escala isométrica (que significa que se ha aplicado la misma escala a los tres ejes), empecemos por la clásica transformación SRT (donde primero se escala, luego se rota y finalmente se traslada). Como siempre su inversa será:
Volvemos a coger el lápiz y calculamos:
La misma inversa SRT pero de una matriz con escalado anisométrico (escalado no idéntico en los tres ejes) sería:
Para terminar veremos la inversa de una matriz que represente una transformación RTS. La inversa con escalado isométrico es:
Y la inversa de una matriz RTS con escala anisométrica es:
Si teneis dificultades para ver alguna de las matrices pulsad con el botón derecho del ratón sobre ella y elegid Abrir/Ver imagen.