3 puntos por GN⁺ 2024-05-25 | 1 comentarios | Compartir por WhatsApp

Resolución de colisiones de cuerpos rígidos en 2D

Definición del problema

  • Desde Mario pisando una nube hasta dos autos chocando en un juego de carreras, manejar colisiones es una parte muy importante en la mayoría de los videojuegos.
  • Esta serie de blog abordará las matemáticas y la física reales de la simulación física.
  • Los videojuegos son una buena forma de dar contexto a estos conceptos y hacerlos menos abstractos.

Una palabra sobre las matemáticas

  • En este artículo aparecen muchas matemáticas, pero se recomienda no tenerles miedo.
  • La notación matemática puede parecer compleja, pero en su mayor parte es aritmética simple.
  • Se recomienda no temerle a las matemáticas y animarse a intentarlo.

Antes de empezar

Cuerpo rígido

  • La física de cuerpos rígidos es una simulación física que trata con objetos que no se deforman.
  • En la realidad, todos los objetos se deforman a nivel molecular, pero en una simulación esto se simplifica tratándolos como cuerpos rígidos.

Detección de colisiones y resolución de colisiones

  • La detección de colisiones es el proceso de comprobar qué objetos están chocando en una escena.
  • La resolución de colisiones es el proceso de decidir cómo deben moverse los objetos que han colisionado.
  • En esta serie de blog nos enfocaremos en la etapa de resolución de colisiones.

¿Qué vamos a hacer?

  • La mayoría de los juegos se ejecutan dentro de un gran bucle.
  • En cada iteración del bucle del juego, la posición de los objetos se actualiza según su velocidad actual.
  • La velocidad es un vector con magnitud y dirección.

Velocidad

  • La velocidad representa el cambio de posición de un objeto durante un cierto tiempo.
  • La nueva posición de un objeto se calcula sumando el desplazamiento, que resulta de multiplicar la velocidad actual por el intervalo de tiempo.

Resolución de colisiones

  • El objetivo de la resolución de colisiones es cambiar la velocidad de los objetos después del choque para que ya no se atraviesen entre sí.
  • La velocidad después de una colisión se expresa como la suma de la velocidad antes de la colisión y el cambio de velocidad causado por la colisión.

¿Qué es una colisión?

  • Para comprobar si dos objetos están colisionando, deben cumplirse dos condiciones:
    1. La forma geométrica de los objetos debe estar en contacto o superponerse.
    2. Los objetos deben seguir moviéndose uno hacia el otro.

Normal de la superficie

  • Para mover un objeto lo más lejos posible de una superficie, hay que moverlo en una dirección perpendicular a esa superficie.
  • A esta dirección se le llama dirección normal, y es perpendicular a la superficie.

Producto punto

  • Para calcular en qué medida dos vectores apuntan en la misma dirección, se usa el producto punto.
  • El producto punto se define como la suma de los productos de los elementos correspondientes de dos vectores.
  • A través del signo del producto punto se puede saber si dos vectores apuntan en la misma dirección o en direcciones opuestas.

Conclusión

  • Una colisión ocurre cuando un punto de un objeto entra en contacto con un punto de otro objeto y la velocidad normal relativa es negativa.
  • En el siguiente artículo se abordará la física real de las colisiones.

La opinión de GN⁺

  • La importancia de la simulación física: en el desarrollo de videojuegos, la simulación física es un elemento importante para aumentar el realismo.
  • El papel de las matemáticas: las matemáticas son el núcleo de la simulación física, y entenderlas permite crear mejores simulaciones.
  • La complejidad de la resolución de colisiones: resolver colisiones es un proceso más complejo que simplemente actualizar la posición de los objetos.
  • Valor educativo: este artículo ayuda mucho a comprender los fundamentos de la simulación física.
  • Aprendizaje adicional: implementar directamente un motor físico también es una buena forma de aprender. Se pueden tomar como referencia motores físicos de código abierto como Box2D o Chipmunk.

1 comentarios

 
GN⁺ 2024-05-25
Opiniones de Hacker News

Resumen de comentarios de Hacker News

  • Hey everyone, author here!

    • Esta es la primera entrada de una serie de blog, dirigida a personas que no son desarrolladores de juegos o que no tienen una base fuerte en matemáticas.
    • Por eso explica los conceptos en detalle.
    • Las preguntas siempre son bienvenidas.
  • Oh! Look, a well-researched, deeply-explained, and interactive post.

    • Al ver el nombre de dominio y que el TLD es ".ski", pensó que sería el autor de otro texto genial, pero resultó ser otra persona.
    • La calidad del artículo es igual de excelente.
    • Tiene curiosidad por el secreto del TLD ".ski".
  • One side project I am working on right now is a 2d space shooter I am developing with my son.

    • Está desarrollando con su hijo un shooter espacial en 2D.
    • Intentó implementarlo por su cuenta sin usar un motor de juego, pero tuvo dificultades con el problema de detección de colisiones.
    • Al final decidió usar Box2D.
    • Aun con más de 20 años de experiencia en desarrollo y formación en matemáticas, se dio cuenta de que había subestimado el problema.
  • I always enjoyed the explanation from the N game: N game tutorial

    • Siempre disfrutó la explicación del juego N en la época en que Flash estaba de moda.
  • I had fun building a TypeScript demo about this topic, involving balls that can bounce and collide. I learned a lot.

    • Se divirtió creando un demo en TypeScript sobre este tema, con pelotas que rebotan y chocan.
    • Aprendió mucho.
    • Código
    • Resultado/demo
  • This is great. This reminds me of Chris Hecker's Rigid Body Dynamics series from GDMag/Gamasutra that I read (checks watch) almost 30 years ago!

  • Collisions are violations of the pairwise non-intersection constraint between bodies.

    • Las colisiones son violaciones de la restricción de no intersección por pares entre cuerpos.
    • La fuerza de colisión es el multiplicador de Lagrange de esa restricción.
    • La normal de colisión es la derivada parcial de la función de restricción.
  • If you want to go further and go for rigid body dynamics and constraint, I found that series of blog post very useful: Toptal blog post

    • Si quieres profundizar en dinámica de cuerpos rígidos y restricciones, esta serie de blog le pareció muy útil.
  • To dredge up a related oldie-but-goodie memory of blog posts: Gaffer on Games

    • Esto le hizo recordar otro viejo pero buenísimo conjunto de posts relacionados.
    • Gaffer on Games
  • Guess this is a Shameless plug but I wrote an interesting program over 12 years ago using even then very old three Js which is not quite the metal but much less abstract than today's tools.

    • Supone que esto es autopromoción descarada, pero escribió un programa interesante hace más de 12 años usando three.js, que incluso entonces ya era muy viejo; no era tan de bajo nivel, pero sí mucho menos abstracto que las herramientas actuales.
    • Busy Boxes