← SEARCHABLE ARCHIVE
Mathematics · 2026-07-15

Problemas que surgen al mezclar convenciones matriciales

Vector de fila, vector de columna, fila principal y sistema de coordenadas

INTERACTIVE READING MODE →

Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.

Hay casos en los que el código de la matriz se mueve, pero el objeto gira en la dirección opuesta o el movimiento se vuelve extraño. Esto suele ocurrir cuando se mezclan las convenciones de vector de fila, vector de columna, orden de almacenamiento y sistema de coordenadas.

Vectores de fila y columna

Convención de vectores de fila
v' = vM

Convención de vectores de columnas
v' = Mv

Incluso si se trata de la misma transformación, la forma de la matriz y el orden de combinación varían según de qué lado se multiplica el vector.

Row-Major es diferente de la regla de multiplicación.

Fila principal y Columna principal se refieren a si las filas o columnas se almacenan consecutivamente en la memoria. Usar vectores de fila y usar almacenamiento de fila principal no significan lo mismo.

procesión
[ a b ]
[ c d ]

Memoria de fila principal: a b c d
Memoria de columna principal: a c b d

transponer matriz

Transponer intercambia filas y columnas.

[ a b c ]T   [ a d ]
[ d e f ]  = [ b e ]
              [ c f ]

Si el diseño esperado de la biblioteca de la CPU y el Shader son diferentes, es posible que se transpongan antes de la carga. Sin embargo, si inserta Transpose incondicionalmente sin saber el motivo, se revertirá nuevamente cuando se combine con otro código.

Comprueba también el sistema de coordenadas.

Los sistemas de coordenadas para zurdos y diestros afectan la dirección del eje Z, la dirección de rotación y la matriz de proyección. Nombre de la función DirectXLH, RHrepresenta esta diferencia.

Cuando encuentre un error de matriz, es mejor escribir primero lo siguiente en lugar de simplemente mirar los números.

¿Los vectores son filas o columnas?
¿En qué dirección está la multiplicación?
¿El almacenamiento de memoria es de fila principal?
¿El sistema de coordenadas es LH o RH?
¿Transponer en Shader?

Cada una de las reglas no es difícil. El problema es mezclar código de diferentes protocolos sin explicación.