Rotación, ¿qué es la Matriz?

De una pregunta anterior, muchas gracias por cierto, pero ¿de qué se trata la Matrix ? Soy muy nuevo en Mono / XNA y encontrar cualquier documentation significativa es prácticamente imposible.

 point = Vector2.Transform(point, Matrix.CreateRotationZ(AngleToRotate); point += originPoint; 

Editar: me gustaría rotar mi mundo de juego 2D alnetworkingedor de mi personaje que está en el centro del puerto de visualización. Me dieron amablemente la function anterior, que estoy seguro de que con el conocimiento de cómo usarla, sería exactamente lo que estoy buscando. Sin embargo, no tengo ese conocimiento. Entiendo cuáles son los vectores, pero no tengo idea de qué se genera la matriz.

En este caso, la matriz se genera a partir de la llamada a Matrix.CreateRotationZ , que es una function (un método estático de la class Matrix ). Crea una matriz de transformación 4×4 que describe una rotation sobre el eje Z. La fórmula para build esa matriz se puede ver aquí , como Rz . Extendiendo que el formulario 4×4 utilizado para la class Matrix , se vería así:

 cos(theta) -sin(theta) 0 0 sin(theta) cos(theta) 0 0 0 0 1 0 0 0 0 1 

theta es el ángulo de rotation deseado (su AngleToRotate ).

Además de la página enlazada de Wikipedia, es posible que desee leer las preguntas frecuentes sobre Matrix y Quaternion .

Lo que tienes actualmente es una transformation matrix son una forma, para representar fácilmente la position, rotation y escala de un object en una escena 3d o 2d, una escena 2d solo necesita una matriz 3 * 3, una 3d usualmente usa una matriz 4 * 4, pero la transformación 2d también se puede representar en una matriz 4 * 4, pero solo desperdicia espacio. La matriz está orientada así:

Matriz de traducción (coorderadas x, y y z)

 1 0 0 x 0 1 0 y 0 0 1 z 0 0 0 1 

Matriz de escala (nuevamente, valores x, y y z)

 x 0 0 0 0 y 0 0 0 0 z 0 0 0 0 1 

La matriz de rotation es un poco más complicada, es diferente en los ejes x, y y z, este es por ejemplo el eje z (para la rotation en 2d básicamente:

 cos(theta) -sin(theta) 0 0 sin(theta) cos(theta) 0 0 0 0 0 0 0 0 0 0 

Al multiplicar estas matrices juntas de una manera estricta (traducción * rotationxyz * scale), ypu obtiene la matriz de trabsformation.

Además, las matrices se usan de muchas maneras más, como matrices de ptoyección, que ayudan a convertir la proyección semicorográfica 2d a, por ejemplo, proyección de perspectiva, o matriz de vista, que define la position de la camera, usted también tiene una matriz de vista.

Si multiplicas juntas la proyección, la vista y la matriz de model / transformación, obtienes una matriz modelviewprojection (MVP), que se utiliza, para get las posiciones de pantalla de los models o sprites.

Para girar tu mundo, necesitas multiplicar cada punto con la matriz de rotation que tienes, y obtienes la position transformada, que parece rotada.