He visto box2d y bullet portados a JavaScript, pero ninguno de ellos me atrajo, excepto el código fuente. Todo parecía bastante simple, una vez que miré dentro.
¿Qué están haciendo dentro de cada una de esas bibliotecas para obtener una buena simulación física? No puedo encontrar ninguna explicación.
Respuestas:
La física del cuerpo rígido es en realidad bastante simple en concepto, es decir, los comportamientos que un motor está tratando de crear no son muy complicados. Probablemente por eso las bibliotecas que miró le parecen bastante simples.
El truco es que hacer un sim que sea robusto , estable y rápido , incluso en presencia de errores de coma flotante y bajas tasas de cuadros variables, es bastante difícil y generalmente implica una gran cantidad de ajustes y violines. Lo que complica aún más el problema es el hecho de que muchas personas extremadamente inteligentes han hecho esfuerzos heroicos para encontrar mejores soluciones, y han creado algoritmos hermosos y poderosos pero difíciles de entender que le han dado al campo una reputación de magia negra.
En general, un motor de física se ocupará de tres cosas (el orden en que las hace en el bucle interno varía):
Para la mayoría de estos, existen algoritmos simples pero no tan precisos como algoritmos complejos pero más precisos. Para comenzar:
Hay una excelente introducción a los métodos simples y lo que puede salir mal en los primeros capítulos del libro recién publicado Game Physics Pearls.
fuente
Lea la serie de física de juegos de Glenn Fiedler: http://gafferongames.com/game-physics/
Además, Erin Catto (autora de Box2D) tiene un artículo sobre dinámica restringida .
Para la detección de colisión, lea Detección de colisión en tiempo real por Christer Ericson
fuente
http://en.wikipedia.org/wiki/Rigid_body_dynamics podría ser un buen lugar para comenzar. Los diferentes juegos dividirán las cosas en diferentes cuerpos, pero en general tienes varios cuerpos rígidos discretos unidos por uniones con propiedades específicas. Cada ciclo a través del juego calcula las fuerzas en cada cuerpo y calcula sus nuevos parámetros (posición, velocidad, etc.). También debe transmitir fuerzas de cada cuerpo a los demás con los que comparte articulaciones y factorizar las fuerzas globales (gravedad).
Esto no cubre cosas como la física de los líquidos o las telas, para mí, todas son tonterías. Hay ecuaciones diferenciales involucradas y ese es el punto donde mis ojos se nublan.
fuente
OpenCloth detalla todas las técnicas de integración de la manera más simple posible. Mucho está en la tubería.
Detalles: http://code.google.com/p/opencloth/
fuente
Una cosa importante, además de las ecuaciones físicas, es rastrear todos los objetos, para que la detección de colisiones e interacciones sea lo más rápida posible. Hashing espacial es la técnica que utiliza el motor de física Chipmunk .
fuente
Solo para agregar a la lista de enlaces, encontré las notas SIGGRAPH de Baraff muy útiles.
fuente