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.
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,
- Dzieje się tak, gdy wolno poruszająca się piłka uderza w ścianę.
- 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
Odpowiedzi:
Kilka rozwiązań.
Dla Box2D ustaw
b2_velocityThreshold
wb2Settings.h
pliku. W moim przypadku ustawiłem0.0f
i 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#p30782Korzystanie 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.
źródło
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
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.
źródło
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.
źródło