Quiero crear una cuerda que pueda chocar con objetos como en el siguiente video de YouTube:
Estoy pensando que implementas la integración verlet que usa puntos y conecta estos puntos con líneas. Estoy tratando de averiguar qué tipo de detección de colisión aplicarías a la cuerda para obtener el efecto en el video.
Estoy pensando que tendrías que hacer un CD para cada punto. Me gustaría usar box2D, así que me pregunto si hacer que cada punto funcione como un cuerpo rígido. Cualquier consejo sería apreciado.
collision-detection
box2d
rope-physics
Joey Green
fuente
fuente
Respuestas:
Como está utilizando Box2D, puede crear una serie de rectángulos y usar las uniones de Box2D para unirlos. Ahí tienes tu soga.
Para evitar que las esquinas sobresalgan de una cuerda doblada, puedo imaginar dos opciones:
Advertencia: nunca he intentado esto yo mismo, pero no puedo ver cómo una serie de rectángulos unidos puede fallar cuando el video que publicó muestra prácticamente lo mismo disfrazado.
Editar: acabo de ver a PaulZ y me di cuenta de lo mismo. Ve a leer su comentario sobre la pregunta también.
fuente
Un rápido Google arrojó esto aquí . Una demostración, descripción y código (en Flash) usando Box2D para implementar una soga simple. La cuerda choca consigo misma y el bloque en la parte superior de la escena.
fuente
Esto es lo que haría, hacer que cada punto de la línea sea un círculo, hacer suficientes puntos para que los círculos se superpongan. Ate cada punto a su vecino, en lugar de una colisión estándar, esta atadura debería hacer que los puntos se mantengan a una distancia fija entre sí.
No conozco Box2D, pero supongo que la funcionalidad requerida está ahí.
fuente
Originalmente, Box2D tenía una demostración de puente de cuerda hecha de cajas delgadas unidas con restricciones punto a punto; ese sería un buen lugar para comenzar (no sé si todavía se incluye con esa demostración, pero sería sencillo recrearlo).
Es bastante fácil implementar la cuerda como partículas con restricciones de distancia independientemente de un simulador de cuerpo rígido (como usted menciona, utilizando un esquema de integración de Verlet y resolución de restricciones como el que se describe en este artículo: http://www.gamasutra.com/resource_guide/ 20030121 / jacobson_pfv.htm ), pero si desea que los cuerpos rígidos reaccionen a su cuerda (como en el video, con la caja colgante), entonces se vuelve mucho más complicado. Comenzaría con un conjunto completo de herramientas como Box2D y trabajaría hacia atrás en lugar de intentar construir a partir de partículas.
fuente
Recuerdo este juego de Allegro: Cupido , de SpeedHack 2002. Contiene una implementación para cuerdas que chocan con el paisaje. Vea las clases PhysParticles y HeartTrails en el archivo heart_tails.cpp en su código fuente .
fuente