Convertir posición, rotación y escala usando matrices
Expresar la transformación de un objeto de juego como una matriz
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.
La posición, rotación y tamaño de un objeto del juego se pueden expresar como una matriz. Primero verifiquemos la transformación basada en el origen en 2D.
conversión de tamaño
[ sx 0 ] [ x ] = [ sx * x ]
[ 0 sy ] [ y ] [ sy * y ]
El eje X essx, el eje Y essyaumenta tanto como Si uno de los dos es negativo, se invierte según ese eje.
transformación de rotación
[ cosθ -sinθ ] [ x ]
[ sinθ cosθ ] [ y ]
Esta matriz rota el vector θ alrededor del origen. Tenga cuidado de no mezclar funciones que reciben grados con funciones que reciben radianes.
¿Por qué el movimiento es 3×3?
El origen no se puede mover a otra ubicación con solo una matriz de 2×2. Entonces en coordenadas 2Dw = 1Utilice coordenadas homogéneas con la adición de .
[ 1 0 tx ] [ x ] [ x + tx ]
[ 0 1 ty ] [ y ] = [ y + ty ]
[ 0 0 1 ] [ 1 ] [ 1 ]
En 3D se utiliza una matriz de 4×4 por el mismo motivo.
Resultados de cambios de orden
Duplicar el tamaño de un objeto y luego moverlo 10 grados hacia la derecha da resultados diferentes que moverlo primero y luego duplicar todas las coordenadas.
Scale → Translate
La posición se mueve en 10
Translate → Scale
La cantidad de movimiento se puede duplicar
Dado que cada motor y biblioteca matemática difiere en si los vectores se colocan en filas o columnas, el orden de multiplicación del código debe verificarse en la documentación. Es más importante en qué sistema de coordenadas y en qué orden se aplica que la propia matriz.