math - primaria - juegos matematicos para hacer a mano
Programación de juegos de aprendizaje(parte 2)(matemáticas) (5)
Específicamente para los vectores, un texto introductorio o un curso sobre álgebra lineal debería permitirle acelerar bastante rápido.
Por lo tanto, han pasado unos meses desde que escribí esta pregunta , desde entonces he jugado con C ++ D3D "en bruto", los motores gráficos de Ogre e Irrlicht y últimamente Microsoft XNA. He creado algunos juegos en 2D (sobre todo réplicas de elementos antiguos como tetris, astreoides, etc.) e hice algunos (muy) pequeños pasos en el mundo 3D en las tecnologías mencionadas.
Tengo poco o ningún problema para crear la lógica del juego real, abstraer las interacciones entre objetos para permitirme conectarme a diferentes formas de control (computadora, jugador, sobre la red, etc.), hacer el enhebrado o cualquiera de las otras cosas que utilizo. a partir de mi trabajo diario, que me parece perfectamente natural. Me equivoqué muy poco con HLSL y efectos de partículas (muy, muy básico).
Pero las matemáticas 3D que involucran Matrices y Vectors (y Quaternions (?) En Ogre3D, ¿son realmente necesarias?) ... realmente me atrapan, puedo seguir ejemplos (por ejemplo, el libro Learning XNA 3.0 que compré de O''Reilly, que es un libro impresionante por cierto) y entiendo por qué y cómo sucede algo en el ejemplo, pero cuando trato de hacer algo yo mismo siento que me falta la comprensión de este tipo de matemáticas para poder realmente obtenerlo y hacerlo funcionar mí mismo.
Así que estoy buscando recursos para aprender matemáticas 3D (principalmente) y algunos libros de Shader / Efectos de partículas. Preferiría los recursos que son pedagógicos y tomarlo más lento que algo así como una tesis doctoral sobre matemática vectorial que estará muy por encima de mi cabeza. El recurso ideal sería algo que lo demuestre todo en D3D.
Fredrik: la respuesta corta es que sí, debes aprender matrices y vectores, ya que son los fundamentos matemáticos para el trabajo en 3D.
Si bien el álgebra lineal definitivamente no es matemática a nivel de doctorado, tomará un poco de trabajo. Para comenzar, mira este libro en Amazon: parece que es exactamente lo que estás buscando. No he leído este libro en particular (el que utilicé en la escuela de postgrado está un poco desactualizado) pero está particularmente bien calificado.
Otra cosa: hay varios motores de modelado 3D que hacen este trabajo para usted en el mercado. El más famoso de estos es posiblemente el Source Engine de Valve. Puede usar este motor (creado para HalfLife2 y CounterStrike) para crear juegos bastante sofisticados mientras trabaja por encima del nivel de modelado 3D. De hecho, uno de los juegos más populares en la red de Steam, el mod de Garry comenzó con alguien que solo jugaba con cosas geniales que puedes hacer con el Steam Engine. Aquí hay un enlace a un sitio que ofrece tutoriales para construir sus propios mundos usando Source Engine en caso de que le interese.
Ok, un curso rápido en el cálculo de Matrix / Vector:
Una matriz es una colección de números ordenados en una cuadrícula rectangular como:
[ 0, 1, 2 ]
[ 2, 3, 5 ]
[ 2, 1, 3 ]
[ 0, 0, 1 ]
La matriz anterior tiene 4 filas y 3 columnas y, como tal, es una matriz de 4 x 3. Un vector es una matriz con 1 fila (un vector de fila) o 1 columna (un vector de columna). Los números normales se llaman escalares para contrastar con las matrices.
También es común usar letras mayúsculas para matrices y letras minúsculas para escalares.
Podemos hacer cálculos básicos con matrices, pero hay algunas condiciones.
Adición
Las matrices se pueden agregar si tienen las mismas dimensiones. Entonces una matriz de 2x2 se puede agregar a una matriz de 2x2 pero no a una matriz de 3x5.
[ 1, 2 ] + [ 2, 5 ] = [ 3, 7 ]
[ 2, 4 ] [ 0, 3 ] [ 2, 7 ]
Usted ve que por adición, cada número en cada celda se agrega al número en la misma posición en la otra matriz.
Multiplicación de matriz
Las matrices se pueden multiplicar, pero esto es un poco más complejo. Para multiplicar la matriz A con la matriz B, necesitas multiplicar los números en cada fila si la matriz A con cada columna en la matriz B. Esto significa que si multiplicas una matriz axb con una matriz acxd, byc deben ser iguales y la la matriz resultante es axd:
[1,2,3] x [4,6] = [1x4+2x2+3x2, 1x6+2x1+3x3 ] = [4+4+6, 6+2+9 ] = [14, 20]
[1,4,5] [2,1] [1x4+4x2+5x2, 1x6+4x1+5x3 ] [4+8+10, 6+4+15 ] [22, 25]
[2,3]
Como puede ver, con matrices, A x B difiere de B x A.
Matriz de multiplicación escalar
Puedes multiplicar una matriz con un escalar. En ese caso, cada celda se multiplica con ese número:
3 x [1,2] = [ 3, 6]
[4,7] [12,21]
Invertir una matriz La división de matriz no es posible, pero puede crear una inversión de una matriz tal que A x A-inv es una matriz con todos los ceros, excepto por esa diagonal principal:
[ 1, 0, 0 ]
[ 0, 1, 0 ]
[ 0, 0, 1 ]
Invertir una matriz solo se puede hacer con matrices cuadradas y es un trabajo complejo que no necesariamente tiene un resultado.
Comience con la matriz A:
[ 1, 2, 3 ]
A = [ 1, 3, 4 ]
[ 2, 5, 1 ]
Agregamos 3 columnas adicionales y las llenamos con la matriz de la unidad:
[ 1, 2, 3, 1, 0, 0 ]
[ 1, 3, 4, 0, 1, 0 ]
[ 2, 5, 1, 0, 0, 1 ]
Ahora comenzamos con la primera columna. Necesitamos restar la primera fila de cada otra fila de modo que la primera columna contenga solo ceros, excepto para la primera fila. Para hacer eso, restamos la primera fila una vez del segundo y dos veces del tercero:
[ 1, 2, 3, 1, 0, 0 ]
[ 0, 1, 1,-1, 1, 0 ]
[ 0, 1,-5,-2, 0, 1 ]
Ahora repetimos esto con la segunda columna (dos veces desde la primera fila y una vez desde la tercera)
[ 1, 0, 1, 3,-2, 0 ]
[ 0, 1, 1,-1, 1, 0 ]
[ 0, 0,-6,-1,-1, 1 ]
Para la tercera columna, tenemos un pequeño problema. El número de pivote es -6 y no 1. Pero podemos resolver esto multiplicando toda la fila con -1/6:
[ 1, 0, 1, 3, -2, 0 ]
[ 0, 1, 1, -1, 1, 0 ]
[ 0, 0, 1, 1/6, 1/6, -1/6 ]
Y ahora podemos restar la tercera fila de la primera y la segunda:
[ 1, 0, 0, 17/6,-13/6, 1/6 ]
[ 0, 1, 0, -7/6, 5/6, 1/6 ]
[ 0, 0, 1, 1/6, 1/6, -1/6 ]
Ok, ahora tenemos el inverso de A:
[ 17/6,-13/6, 1/6 ]
[ -7/6, 5/6, 1/6 ]
[ 1/6, 1/6, -1/6 ]
Podemos escribir esto como:
[ 17,-13, 1 ]
1/6 * [ -7, 5, 1 ]
[ 1, 1, -1 ]
[ 1, 2, 3 ] [ 17,-13, 1 ] [ 6, 0, 0 ] [ 1, 0, 0 ]
A = [ 1, 3, 4 ] x [ -7, 5, 1 ] x 1/6 = 1/6 x [ 0, 6, 0 ] = [ 0, 1, 0 ]
[ 2, 5, 1 ] [ 1, 1, -1 ] [ 0, 0, 6 ] [ 0, 0, 1 ]
Espero que esto ayude un poco.
'' Matemáticas para aplicaciones de gráficos por computadora '' es un libro de texto de nivel introductorio y toma un enfoque apropiado para el aula de todas las matemáticas básicas que necesita conocer para la programación 3D (principalmente matrices y vectores)
Y una nota con respecto a los cuaterniones: son muy útiles para ciertas aplicaciones. SLERP (Intercalación Lineal Esférica) puede ser muy útil para producir movimientos suaves / atractivos de la cámara (entre otras cosas). SLERP es un dolor (costoso) para hacer con matrices, pero es económico y fácil con Quaternions. Aprende a usarlos y amarlos, incluso si no los entiendes del todo.
Definitivamente necesitas aprender álgebra lineal. MIT lanzó toda la clase en youtube, gratis. Puedes comenzar desde aquí . No es tan difícil, créanme! Que te diviertas ;)