Estoy haciendo un juego de billar como juego. Este juego requiere rebotes reflectantes correctos (o muy precisos). Probé Box2D y bala Física , pero ambos tienen este problema.
Si hay una pared encima de esta imagen, se espera una línea roja en el curso de una pelota real en un juego de billar. Pero los motores a menudo muestran un curso de línea verde. Especialmente,
- Esto sucede después de que una bola que se mueve lentamente golpea la pared.
- A veces una bola que se mueve rápidamente se vuelve más lenta de repente.
Estoy encontrando un motor de física que puede simular el juego de billar con la mayor precisión posible sin estos problemas. ¿Puedo obtener algunas recomendaciones? Ahora estoy cavando Newton Game Dynamics , pero no estoy seguro de que el motor muestre lo que quiero. Estoy considerando el motor PhysX como una próxima prueba, y tengo que hacer el mío si nada funciona. Pero es obvio que tomará mucho tiempo, así que desearía no hacerlo. Seré muy apreciado si me ahorras tiempo. Y, por supuesto, la solución con Box2D / Bullet Physics también es bienvenida.
Estoy trabajando con C / C ++ / Objective + C en iOS.
Adjunto mi configuración con Box2D.
Paredes
- forma de caja estática
- amortiguación lineal / angular = 0.1
- restitución = 1.0
- fricción = 100
- densidad = 10
- bala = falso
- rotación fija = falso
- escala inercial = 1.0
Pelotas
- forma de esfera dinámica
- amortiguación lineal / angular = 0.1
- restitución = 1.0
- fricción = 100
- densidad = 20
- bala = verdadero
- rotación fija = falso
- escala inercial = 1.0
Respuestas:
Varias soluciones
Para Box2D, establecer
b2_velocityThreshold
en elb2Settings.h
archivo. En mi caso, lo configuré0.0f
y funcionó. Masa, fricción, amortiguación NO fueron un problema. Consulte este hilo de discusión para más detalles. http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782Usando otro motor de física. Newton Game Dynamics configuró realizar esto correctamente por defecto. Sin embargo, es posible usar la dinámica de Newton en iOS, pero es algo más difícil que otros. Utilicé varios días configurándolo para iOS.
También estoy preguntando en los foros de BulletPhysics. Actualizaré esto cuando tenga una solución.
- (editar) -
Hay algunos atributos de umbral en Bullet, sin embargo, no pude encontrar exactamente lo mismo con
b2_velocityThreshold
.Esto se ve similar, pero no funcionó bien.
fuente
Box2D hará lo que quiera, pero debe establecer las constantes de restitución (rebote) para los accesorios de pared y bola. Para un juego de billar, probablemente desee comenzar con una restitución perfecta y una alta fricción, pero con amortiguación lineal y angular, y ajustar desde allí.
fuente
Los motores de física tienen un umbral de rebote. No sé cómo hacerlo en ninguno de esos motores, pero el umbral que se establece demasiado alto hará que ignore los impactos a cierta velocidad. Baje el umbral de rebote y rebotará a velocidades más bajas.
Sé que pediste un motor de física diferente, pero todos los motores de física que conozco usan umbrales de rebote para evitar que los objetos vibren cuando están sentados uno encima del otro. Por lo tanto, sugerir un buen motor de física será contraproducente ya que cualquier buen motor de física tendrá este efecto.
fuente
Tuve este problema y para mí la solución fue proporcionar una restitución perfecta.
Entonces para mí eso es sqrt de 0.5 para todos los objetos. Porque sqrt (r1 * r1 + r2 * r2) == 1 en situación perfecta.
fuente