Zalecenia silnika fizyki, które mogą poprawnie symulować grę w bilard? [Zamknięte]

13

Robię grę w bilard. Ta gra wymaga poprawnych (lub bardzo dokładnych) odbić odbijających. Próbowałem Box2D i Bullet Physics , ale oba mają ten problem.

Ilustracja

Jeśli na tym obrazie jest ściana, należy spodziewać się, że czerwona linia będzie przebiegać jak prawdziwa piłka w grze bilardowej. Ale silniki często pokazują kurs zielonej linii. Szczególnie,

  1. Dzieje się tak, gdy wolno poruszająca się piłka uderza w ścianę.
  2. Czasami szybko poruszająca się piłka nagle staje się wolniejsza.

Znajduję silnik fizyki, który bez tych problemów może dokładnie symulować grę w bilard. Czy mogę uzyskać jakieś rekomendacje? Teraz kopie dynamikę gry Newtona , ale nie jestem pewien, czy silnik pokaże, czego chcę. Zastanawiam się PhysX silnik jako kolejnej rozprawie, i trzeba zrobić własny, jeśli nic nie działa. Ale to oczywiste, że zajmie to bardzo dużo czasu, więc chciałbym tego nie robić. Będę bardzo wdzięczny, jeśli zaoszczędzisz mój czas. Oczywiście mile widziane jest również rozwiązanie z Box2D / Bullet Physics.

Pracuję z C / C ++ / Objective + C na iOS.


Załączam swoją konfigurację z Box2D.

Ściany

  • kształt pudełka statycznego
  • tłumienie liniowe / kątowe = 0,1
  • restytucja = 1,0
  • tarcie = 100
  • gęstość = 10
  • punktor = fałsz
  • naprawiono obrót = fałsz
  • skala inercyjna = 1,0

kulki

  • dynamiczny kształt kuli
  • tłumienie liniowe / kątowe = 0,1
  • restytucja = 1,0
  • tarcie = 100
  • gęstość = 20
  • punktor = prawda
  • naprawiono obrót = fałsz
  • skala inercyjna = 1,0
Eonil
źródło
3
są szanse, że silnik nie jest zły, ale nie ustawiłeś właściwości ani nie zrobiłeś jej w jakiś sposób.
Kaczka komunistyczna
możliwy duplikat Czy istnieje algorytm gry w bilard?
bummzack
Testowałem z gęstością 1 i tarciem 0,0 ~ 0,1, nadal się klei.
Eonil

Odpowiedzi:

8

Kilka rozwiązań.

  1. Dla Box2D ustaw b2_velocityThresholdw b2Settings.hpliku. W moim przypadku ustawiłem 0.0fi działało! Masa, tarcie, tłumienie NIE były problemem. Sprawdź ten wątek dyskusyjny, aby uzyskać więcej informacji. http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782

  2. Korzystanie z innego silnika fizyki. Dynamika gry Newton skonfigurowana tak, aby domyślnie działała poprawnie. Korzystanie z dynamiki Newtona w iOS jest jednak możliwe, ale jest nieco trudniejsze niż w innych. Użyłem kilku dni, konfigurując go na iOS.

Pytam również na forach BulletPhysics. Zaktualizuję to, gdy otrzymam rozwiązanie.

-- (edytować) --

W Bullet są pewne atrybuty progowe, jednak nie mogłem znaleźć dokładnie tego samego b2_velocityThreshold.

To wygląda podobnie, ale nie działało dobrze.

btRigidBody->setContactProcessingThreshold(0.0f)
Eonil
źródło
6

Box2D zrobi to, co chcesz, ale musisz ustawić stałe restytucji (odbicia) dla opraw ściennych i kulowych. W przypadku gry w basenie prawdopodobnie chcesz zacząć od doskonałej restytucji i wysokiego tarcia, ale z tłumieniem liniowym i kątowym, i stamtąd dostrajać.


źródło
Próbowałem wielu konfiguracji przez kilka dni, ale nadal tak się dzieje. Czy mogę dostać jeden dobry przykład ...?
Eonil
3
Twoje wartości gęstości i tarcia wydają się bardzo duże, jak na Box2D.
4

Silniki fizyki mają próg odskoku. Nie wiem, jak to zrobić w żadnym z tych silników, ale ustawienie zbyt wysokiego progu spowoduje, że zignoruje uderzenia przy określonej prędkości. Obniż próg odbicia, a odbije się przy niższych prędkościach.

Wiem, że poprosiłeś o inny silnik fizyki, ale wszystkie silniki fizyki, które znam, wykorzystują progi odrzuceń, aby zapobiec drganiom obiektów, gdy siedzą jeden na drugim. Zatem zasugerowanie dobrego silnika fizyki przyniesie efekt przeciwny do zamierzonego, ponieważ każdy dobry silnik fizyki będzie miał taki efekt.

brandon
źródło
0

Miałem ten problem i dla mnie rozwiązaniem było zapewnienie doskonałej restytucji.

Dla mnie to sqrt 0,5 dla wszystkich obiektów. Ponieważ sqrt (r1 * r1 + r2 * r2) == 1 w idealnej sytuacji.

weston
źródło