Silniki fizyki 2D miękkiego ciała?

9

Cześć, więc niedawno poznałem bibliotekę graficzną SFML i chciałbym używać lub tworzyć system fizyki 2D niesztywnego ciała. Mam trzy pytania:

Definicja sztywnego ciała w Box2d to

Kawałek materii, który jest tak silny, że odległość między dowolnymi dwoma kawałkami materii na bryle jest całkowicie stała.

I właśnie tego nie chcę, ponieważ chciałbym tworzyć elastyczne, odkształcalne, kruche i ponownie łączące ciała. 1. Czy są jakieś proste silniki fizyki 2D, ale z takimi cechami? najlepiej darmowy czy opensource?

2. Jeśli nie, mogę użyć box2d i przerobić go, aby go utworzyć, nawet jeśli jest oparty na sztywnych ciałach?

3. Na koniec, jeśli istnieje taki prosty silnik fizyki, czy powinienem przejść proces tworzenia nowego, po prostu w celu zdobycia doświadczenia i poszerzenia wiedzy z matematyki? Wydaje mi się, że pomogłoby to, gdybym kiedykolwiek chciał zmodyfikować kod istniejącego silnika lub stworzyć grę z naprawdę wyjątkową fizyką.

Dzięki!

Gryf
źródło
1
Był ten silnik o nazwie JelloPhysics (C #), ale strona wydaje się nie działać. Tutaj jest film: youtube.com/watch?v=SvqY_pgA6DU
bummzack

Odpowiedzi:

6

Możesz użyć systemów sztywnego korpusu, aby stworzyć miękkie ciało i dynamikę płynów. Fizyczny powód tego? Zasadniczo atomy to małe sztywne ciała. Nie jest to oczywiście do końca prawda, ale dla uproszczenia można je postrzegać jako takie. A miękkie ciała są oczywiście zbudowane z atomów.

Jak więc stworzyć „miękkie ciała” za pomocą silnika o sztywnym nadwoziu, takiego jak Box2D?

Podstawową techniką jest łączenie punktów w ciele za pomocą stawów. Na przykład, jeśli łączysz końce listy linii za pomocą połączeń dystansowych (co oznacza, że ​​odległość między dwoma połączeniami musi być stała), będzie on z grubsza zachowywać się jak kawałek materiału.

Ale to tylko przybliżony opis. Ewjordan, jeden z twórców portu Java Box2D, wykonał wiele „elementarnych prac polowych” w Box2D. Oto dobry punkt wyjścia: http://www.box2d.org/forum/viewtopic.php?f=8&t=1978

TravisG
źródło
Potrzebna jest kombinacja sprężyn naciągowych / ściskających, aby zachować „kształt” miękkiego ciała, a także obliczyć objętość, aby zachować całość.
Jonathan Connell,
Tak, ale wszystko to odbywa się za pośrednictwem połączeń, jeśli mówimy o Box2D. Pewnie, że będzie musiał ręcznie zmienić ich zachowanie, ale od tego musi zacząć. Na przykład dla stałych efektów głośności w obiektach typu blob typu Gish JBox2D ma ConstantVolumeJoint.
TravisG
Tak, nie znam się na Box2D, po prostu wiem, jak niektórzy koledzy używali PhysX do symulacji bańki ^^
Jonathan Connell,
1

Pojęcie, którego szukasz, to fizyka ciała miękkiego.

Wikipedia ma ładną listę. Wszystkie są 3D AFAICS, ale powinny być dobre.

Sprawdź także to SO pytanie.

Świetną książką (sztywne ciało, ale wszystkie matematyki i fizyki są tam; to także 3D, ale przeniesienie do 2D jest banalne) to Game Physics Engine Development . Implementuje system oparty na cząsteczkach przed przejściem na sztywne ciała i zderzeniem.

Kaczka komunistyczna
źródło
1

Jednym prostym sposobem symulacji miękkich ciał jest połączenie ze sobą małych sztywnych ciał za pomocą elastycznych połączeń. Następnie trudną częścią jest dostrojenie parametrów modelu i odwzorowanie tekstury na model leżący u podstaw.

Poniższy post na blogu przedstawia implementację odkształcalnej piłki z silnikiem cocos2d: http://2sa-studio.blogspot.com/2014/05/soft-bodies-with-cocos2d-v3.html

sdabet
źródło
kredyty do debugowania cocos2d ;-)
sdabet