Libro de cocina de física de juegos
- Sitio web
- Facebook
- Gorjeo
Este libro es una guía completa del álgebra lineal y los juegos de detección de colisiones que se utilizan habitualmente, pero sólo aborda brevemente el tema de la resolución de colisiones (Física). El libro está estructurado de la siguiente manera:
- Los capítulos 1, 2 y 3 cubren los conceptos básicos de álgebra lineal.
- Los capítulos 4, 5 y 6 cubren primitivas bidimensionales y cómo detectar intersecciones entre ellas.
- Los capítulos 7, 8, 9 y 10 cubren primitivas tridimensionales y la forma más eficiente de determinar las intersecciones entre ellas.
- Los capítulos 11, 12 y 13 cubren mallas, escenas y organización de escenas.
- Los capítulos 14, 15 y 16 cubren la física. A lo largo de estos tres capítulos construimos un motor de física de cuerpos rígidos muy básico.
Todos los temas tratados en este libro se utilizan para construir progresivamente un motor de física de cuerpos rígidos. Los últimos tres capítulos (14, 15 y 16) implementan la física de partículas, la física de cuerpos rígidos y la física de cuerpos blandos (tela). Se proporciona un apéndice que cubre brevemente temas avanzados, recursos para explorar estos temas y recursos adicionales para explorar la física del juego.
Figuras
Algunas de las figuras creadas para el libro no se imprimieron bien. Para abordar esto, he incluido todas las figuras de los libros en este repositorio y las he publicado en línea en: https://github.com/gamephysicscookbook/Figures
Matemáticas
Los primeros tres capítulos del libro están dedicados a enseñar el álgebra lineal básica necesaria para el desarrollo de juegos. Cada concepto se explica en un contexto matemático, se proporciona el código fuente para cada concepto y también se proporcionan imágenes cuando algo se puede explorar visualmente. A lo largo de los primeros tres capítulos se crean las siguientes estructuras de datos:
- Vector bidimensional (
vec2
) - Vector tridimensional (
vec3
) - Matriz 2x2 (
mat2
) - Matriz 3x3 (
mat3
) - Matriz 4x4 (
mat4
)
Cuando es posible, las operaciones matriciales se implementan de forma genérica. Por ejemplo, se proporciona código para multiplicar dos matrices de tamaños arbitrarios.
Detección de colisiones
Las siguientes intersecciones están cubiertas en el libro:
| Punto | Línea | Rayo | Esfera | AABB | OBB | Avión | Triángulo | Tronco |
---|
Punto | | | | | | | | | |
Línea | | | | | | | | | |
Rayo | | | | | | | | | |
Esfera | | | | | | | | | |
AABB | | | | | | | | | |
OBB | | | | | | | | | |
Avión | | | | | | | | | |
Triángulo | | | | | | | | | |
Tronco | | | | | | | | | |
Física
El capítulo 14 cubre la física de partículas ingenua; este capítulo pretende ser una introducción a la configuración de un bucle de física y a la consideración del formato general de un bucle de física. El capítulo 15 es el capítulo más interesante, implementa un motor básico de física de cuerpos rígidos. El motor básico tiene soporte para cajas y esferas orientadas, se puede hacer que funcione el apilamiento pero no tiene soporte directo. El capítulo 16 cubre los resortes y cómo se pueden utilizar para implementar la física del cuerpo blando. La demostración final del libro es una demostración de física de tela y cuerpo blando.
Aprendizajes
Al ser este mi primer libro, he aprendido mucho sobre el proceso de escritura; quizás incluso más sobre planificación. La siguiente es una lista de cosas que descubrí mientras escribía este libro y que no planifiqué adecuadamente:
Cuaterniones : ¡Tener un cuaternión es imprescindible! Planeé escribir el libro usando rotaciones de Euler y matrices de rotación. Si bien esto funcionó, tener acceso a los cuaterniones habría hecho la vida mucho más fácil.
Planos : Las intersecciones de planos no deben devolver un valor booleano, deben clasificar la intersección como: detrás, intersectando, delante. Preferiblemente, si la intersección está delante o detrás, desea devolver alguna indicación de la distancia. Esto resulta muy útil al realizar la selección de Frustum. No sabía con qué profundidad iba a escribir sobre los frustums, así que decidí hacer una intersección booleana simple.
Raycasting : debería haber escrito raycasts para devolver un resultado de raycast desde el principio. Tener que volver atrás y reescribir la API de raycasting resultó ser más complicado de expresar en texto de lo que esperaba. La idea detrás de esto era mantener las cosas simples al principio y complicarlas sólo cuando fuera necesario.
Asuntos
Hay varios problemas en la implementación física del código fuente. Estas cuestiones surgen del hecho de que la parte de física de este libro tuvo que condensarse en tres capítulos. Simplemente no hubo tiempo suficiente para cubrir todo lo necesario para crear un sistema físico de cuerpo rígido robusto. El mayor problema con el motor es el hecho de que no hay ningún árbitro .
Sin un árbitro, no podemos construir un solucionador de impulsos secuencial. Esto nos deja con un solucionador de impulsos bastante ingenuo y básico. El problema es que los impulsos se resuelven por contacto por cuadro. Esto provoca un deslizamiento excesivo. He compensado la falta de impulso secuencial con proyección lineal y polarización de fricción agresiva. Los motores de física más antiguos hacen algo similar, confiando en dormir con mano dura para enmascarar el problema. No hace falta decir que no se implementó el sueño.
Futuro
Si tengo la oportunidad de escribir una segunda edición de este libro, eliminaré los capítulos sobre colisiones bidimensionales (capítulos 4, 5 y 6) y reduciré el número de páginas de los capítulos sobre gestión de escenas. Planeo usar las páginas adicionales para cubrir los siguientes temas:
- Discusión en profundidad e implementación de GJK.
- Un sistema de árbitro adecuado y un modelo de resolución de colisiones más estable.
- Cápsula primitiva
- Generación de casco convexo y pruebas de colisión.
Información del libro
- ISBN-13: 9781787123663
- Ver en Packt
- Ver en Amazon
- Todas mis publicaciones
Tabla de contenido
- Vectores
- Introducción
- Definición de vectores
- Operaciones basadas en componentes
- Producto escalar
- Magnitud
- Normalizando
- Producto cruzado
- Anglos
- Proyección
- Reflexión
- matrices
- Introducción
- Definición de matriz
- Transponer
- Multiplicación
- Matriz de identidad
- Determinante de una matriz de 2x2
- Matriz de menores
- cofactor
- Determinante de una matriz de 3x3
- Operaciones en una matriz 4x4.
- Matriz adjunta
- Matriz inversa
- Transformaciones matriciales
- Introducción
- Especialidades en matrices
- Traducción
- Escalada
- Cómo funcionan las rotaciones
- Matrices de rotación
- Rotación del ángulo del eje
- Multiplicación de matrices vectoriales
- Transformar matriz
- Matriz de proyección
- Formas primitivas 2D
- Introducción
- puntos 2D
- líneas 2D
- Círculo
- Rectángulo
- Rectángulo orientado
- Contención de puntos
- intersección de líneas
- Colisiones 2D
- Introducción
- Círculo a círculo
- Círculo a rectángulo
- Círculo a rectángulo orientado
- Rectángulo a rectángulo
- Teorema del eje de separación
- Rectángulo a rectángulo orientado
- Rectángulo orientado a rectángulo orientado
- Optimizaciones 2D
- Introducción
- círculo que contiene
- que contiene rectángulo
- Formas simples y complejas
- árbol cuádruple
- Colisiones de fase amplia
- Formas primitivas 3D
- Introducción
- Punto
- segmento de línea
- Rayo
- Esfera
- Cuadro delimitador alineado con el eje
- Caja delimitadora orientada
- Avión
- Triángulo
- Pruebas de puntos 3D
- Introducción
- Punto y esfera
- Cuadro delimitador alineado con puntos y ejes
- Cuadro delimitador de puntos y orientado
- Punto y plano
- punto y linea
- Punto y rayo
- Intersecciones de formas 3D
- Introducción
- Esfera a esfera
- Cuadro delimitador alineado de esfera a eje
- Esfera al cuadro delimitador orientado
- Esfera al plano
- Cuadro delimitador alineado con el eje a cuadro delimitador alineado con el eje
- Cuadro delimitador alineado con el eje a cuadro delimitador orientado
- Cuadro delimitador alineado con el eje al plano
- Cuadro delimitador orientado a cuadro delimitador orientado
- Cuadro delimitador orientado al plano
- Avión a avión
- Intersecciones de líneas 3D
- Introducción
- Esfera de transmisión de rayos
- Cuadro delimitador alineado con el eje Raycast
- Cuadro delimitador orientado a Raycast
- Avión de transmisión de rayos
- Esfera de prueba de línea
- Cuadro delimitador alineado con el eje de prueba de línea
- Cuadro delimitador orientado a prueba de línea
- Plano de prueba de línea
- Triángulos y mallas
- Introducción
- Punto en triangulo
- Triángulo de punto más cercano
- Triángulo a esfera
- Cuadro delimitador alineado del triángulo al eje
- Triángulo a caja orientada
- Triángulo al plano
- Triángulo a triángulo
- Robustez del teorema del eje de separación.
- Triángulo de Raycast
- Triángulo de prueba de líneas
- Objeto de malla
- Optimización de malla
- Operaciones de malla
- Modelos y escenas
- Introducción
- El objeto modelo
- Operaciones sobre modelos.
- El objeto de la escena.
- Operaciones en el lugar
- El objeto octree
- Operaciones en el octree
- Integración de octree y escena.
- Cámara y Frustum
- Introducción
- Objeto de cámara
- Controles de cámara
- objeto fructum
- Frusum de matriz
- Esfera en frustum
- Cuadro delimitador en frustum
- sacrificio de octárboles
- Cosecha
- Resolución de restricciones
- Introducción
- Introducción al marco
- Esfera de transmisión de rayos
- cuadro delimitador de raycast
- Plano y triángulo de Raycast.
- sistema de fisica
- Integrando partículas
- Resolver restricciones
- Integración Verlet
- Colectores e Impulsos
- Introducción
- Colector para esferas
- Colector para cajas
- Modificaciones de carrocería rígida.
- velocidad lineal
- Impulso lineal
- Actualización del sistema de física.
- velocidad angular
- impulso angular
- Sprints y articulaciones
- Introducciones
- Modificaciones de partículas
- Ballestas
- Paño
- Modificación del sistema de física.
- Articulaciones
- Apéndice: Temas avanzados
- Introducción
- Colisiones genéricas
- Mejoras de estabilidad
- Sprints
- Motores de física de código abierto
- Libros
- Recursos en línea
- Resumen
Cubrir