Raccomandazione del motore fisico che può simulare correttamente il gioco del biliardo? [chiuso]


13

Sto realizzando un gioco tipo biliardo. Questo gioco richiede rimbalzi corretti (o molto precisi) riflettenti. Ho provato Box2D e Bullet Physics , ma entrambi hanno questo problema.

Illustrazione

Se c'è un muro in cima a questa immagine, è prevista una linea rossa nel corso di una vera palla in un gioco di biliardo. Ma i motori mostrano spesso una linea verde. Particolarmente,

  1. Ciò accade dopo che una palla che si muove lentamente colpisce il muro.
  2. A volte una palla che si muove rapidamente diventa improvvisamente più lenta.

Sto trovando un motore fisico in grado di simulare il gioco di biliardo il più accuratamente possibile senza questi problemi. Posso avere qualche consiglio? Ora sto scavando Newton Game Dynamics , ma non sono sicuro che il motore mostrerà quello che voglio. Sto prendendo in considerazione il motore PhysX come prova successiva e, se non funziona, devo crearne uno mio. Ma è ovvio che ci vorrà molto tempo, quindi vorrei non farlo. Sarò molto apprezzato se mi risparmierai tempo. E, naturalmente, anche la soluzione con Box2D / Bullet Physics è benvenuta.

Sto lavorando con C / C ++ / Objective + C su iOS.


Allego la mia configurazione con Box2D.

Walls

  • forma di scatola statica
  • smorzamento lineare / angolare = 0,1
  • restituzione = 1.0
  • attrito = 100
  • densità = 10
  • bullet = false
  • rotazione fissa = falso
  • scala inerziale = 1.0

Balls

  • forma di sfera dinamica
  • smorzamento lineare / angolare = 0,1
  • restituzione = 1.0
  • attrito = 100
  • densità = 20
  • bullet = true
  • rotazione fissa = falso
  • scala inerziale = 1.0

3
è probabile che il motore non sia sbagliato, ma in qualche modo non hai impostato una proprietà o non hai sbagliato.
Il comunista Duck


Ho provato con densità 1 e attrito 0,0 ~ 0,1, continua ad attaccare.
Eonil,

Risposte:


8

Diverse soluzioni

  1. Per Box2D, impostare b2_velocityThresholdnel b2Settings.hfile. Nel mio caso, l'ho impostato su 0.0fe ha funzionato! Massa, attrito, smorzamento NON erano un problema. Controlla questo thread di discussione per maggiori dettagli. http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782

  2. Utilizzando un altro motore fisico. Newton Game Dynamics configurato eseguendo questo correttamente per impostazione predefinita. Tuttavia è possibile utilizzare la dinamica di Newton in iOS, ma è un po 'più difficile di altri. Ho usato diversi giorni configurandolo per iOS.

Chiedo anche sui forum BulletPhysics. Lo aggiornerò quando avrò una soluzione.

-- (modificare) --

In Bullet ci sono alcuni attributi di soglia, tuttavia non sono riuscito a trovare esattamente la stessa cosa b2_velocityThreshold.

Sembra simile, ma non ha funzionato bene.

btRigidBody->setContactProcessingThreshold(0.0f)

6

Box2D farà quello che vuoi ma devi impostare le costanti di restituzione (rimbalzo) per i dispositivi a parete e a sfera. Per un gioco di biliardo, probabilmente vorrai iniziare con una restituzione perfetta e un attrito elevato ma uno smorzamento lineare e angolare e modificare da lì.


Ho provato molte configurazioni in pochi giorni, ma succede ancora. Posso avere un buon esempio ...?
Eonil

3
I valori di densità e attrito sembrano molto grandi, per Box2D.

4

I motori fisici hanno una soglia di rimbalzo. Non so come farlo in nessuno di questi motori, ma la soglia impostata troppo alta lo farà ignorare gli impatti a una determinata velocità. Abbassa la soglia di rimbalzo e rimbalzerà a velocità più basse.

So che hai chiesto un motore fisico diverso, ma tutti i motori fisici che conosco usano soglie di rimbalzo per evitare che gli oggetti si muovano quando si trovano uno sopra l'altro. Quindi suggerire un buon motore fisico sarà controproducente poiché qualsiasi buon motore fisico avrà questo effetto.


0

Ho avuto questo problema e per me la soluzione è stata quella di fornire una perfetta restituzione.

Quindi per me questo è sqrt di 0,5 per tutti gli oggetti. Perché sqrt (r1 * r1 + r2 * r2) == 1 in una situazione perfetta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.