Este libro es una guía completa de los juegos de detección de álgebra lineal y de colisión comúnmente que se usan comúnmente, pero solo toca brevemente el tema de la resolución de colisión (física). El libro está estructurado de la siguiente manera:
Todos los temas cubiertos en este libro se utilizan para progresar en un motor de física de cuerpo rígido. Los últimos tres capítulos (14, 15 y 16) implementan física de partículas, física rígida del cuerpo y física del cuerpo blando (tela). Se proporciona una apéndice que cubre brevemente temas avanzados, recursos para explorar estos temas, así como recursos adicionales para explorar la física del juego.
Algunas de las figuras creadas para el libro no se traducieron bien para imprimir. Para abordar esto, he incluido todas las figuras del libro en este repositorio y publicado las figuras en línea en: https://github.com/gameLicsicScookbook/figures
Los primeros tres capítulos del libro están dedicados a enseñar la álgebra lineal básica necesaria para el desarrollo de juegos. Cada concepto se explica en un contexto matemático, el código fuente se proporciona para cada concepto y también se proporcionan imágenes cuando algo se puede explorar visualmente. TroughOut Los primeros tres capítulos se crean las siguientes estructuras de datos:
vec2
)vec3
)mat2
)mat3
)mat4
)Cuando es posible, las operaciones de matriz se implementan de manera genérica. Por ejemplo, se proporciona código para multiplicar dos matrices de tamaños arbitrarios.
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 |
El Capítulo 14 cubre la física de partículas ingenuas, este capítulo se entiende como una introducción a la configuración de un bucle de física y considerando el 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 del cuerpo rígido. El motor básico tiene soporte para cajas y esferas orientadas, el apilamiento se puede hacer que funcione, pero no se admite directamente. El Capítulo 16 cubre resortes y cómo se pueden usar resortes para implementar la física del cuerpo suave. La demostración final del libro es un cuerpo suave, una demostración de física de tela.
Siendo este mi primer libro, he aprendido mucho sobre el proceso de escritura; Quizás aún más sobre la planificación. La siguiente es una lista de cosas que he descubierto al escribir este libro que no planeé correctamente:
Quaternions : ¡Tener un cuaternión es imprescindible! Planeaba 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 avión no deben devolver un valor booleano, deben clasificar la intersección como: detrás, intersección, al frente. Preferiblemente, si la intersección está al frente o detrás, desea devolver alguna indicación de distancia. Esto se vuelve muy útil cuando se hace frustum. No sabía qué tan profundo iba a escribir sobre los frustums, así que decidí hacer un booleano simple booleano.
Raycasting : Debería haber escrito Raycasts para devolver un resultado de Raycast del principio. Tener que luego volver y volver a escribir la API de Raycasting resultó ser más complicado de expresar en texto de lo que esperaba. El juicio detrás de esto era mantener las cosas simples al principio, complicarse solo según sea necesario.
Hay varios problemas en la implementación física del código fuente. Estos problemas provienen del hecho de que la parte física de este libro tuvo que ser condensada en tres capítulos. Simplemente no había tiempo suficiente para cubrir todo lo necesario para hacer un sistema de física de cuerpo rígido robusto. El mayor problema con el motor es el hecho de que no hay árbitro .
Sin un árbitro, no podemos construir un solucionador de impulso secuencial. Esto nos deja con un solucionador de impulso ingenuo de huesos bastante desnudos. El problema es que los impulsos se resuelven por contacto por cuadro. Esto causa deslizamiento excesivo. He compensado la falta de impulso secuencial con proyección lineal y sesgo de friciton engresivo. Los motores de física más antiguos hacen algo similar, confiando en un sueño de mano fuerte para enmascarar el problema. No hace falta decir que dormir no se implementó.
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 recuento de páginas de los capítulos de gestión de la escena. Planeo usar las páginas adicionales para cubrir los siguientes temas: