Jak mogę symulować rozbicie szkła?


10

Muszę wykonać symulację z kamieniem rzuconym przez szklane okno. Jak mogę to osiągnąć?

To znaczy myślałem o stworzeniu modelu 3D kamienia i szkła w 3D Studio Max 2012, rozbiciu szkła i wyeksportowaniu obu do XNA 4.0 jako modeli .x. Następnie w XNA wykonaj animację - pisząc własny silnik fizyki. Czy to możliwe w ten sposób? Czy możliwe jest zniszczenie szkła w XNA po uderzeniu, czy powinienem to zrobić w 3DS Max? Przez „niszczenie szkła” mam na myśli odłączenie niektórych wcześniej odłamanych kawałków szkła od siebie, ponieważ w zależności od prędkości początkowej i ciężaru kamienia oraz rezystancji (twardości?) Szkła (wszystkie zdefiniowane przez użytkownika) bity zostaną odłączone od nawzajem na różne sposoby.

Odpowiedzi:


5

Roztrzaskanie Voronoi to jedno podejście, które tworzy dość realistyczny roztrzaskanie np. szkło hartowane, które ma niezwykłą zdolność do rozbijania się na małe, zazwyczaj wypukłe fragmenty z powodu zmian strukturalnych w szkle podczas produkcji. Ponadto, mając taflę szkła, potrzebujesz tylko implementacji 2D Voronoi, a nie 3D.


3

Myślę, że automatyczne generowanie rozbitych kawałków z początkowo całej siatki jest dość trudne. Jeśli chcesz po prostu symulować dynamikę odłamków, które latają w powietrzu, zderzają się itp., Zacznę od wstępnie rozbitej siatki, używając łamliwych wiązań lub czegoś, co utrzyma elementy razem, dopóki nie zostaną pociągnięte osobno z wystarczającą siłą.


Cześć Nathan (ponownie), czy pracowałeś nad tym zadaniem po 2011 roku? Czy możesz podać więcej wskazówek? Thx
karlphillip

@karlphillip Pracowałem nad wersją demonstracyjną przy użyciu PhysX Destruction , chociaż osobiście wykonałem tylko renderowanie, a nie fizykę w tym projekcie. Technologia PhysX polega na generowaniu wstępnie rozbitych elementów w narzędziu DCC i zamianie ich na nieprzerwaną siatkę, gdy dojdzie do uszkodzenia.
Nathan Reed,

3

Zrób niezniszczoną szybę i zniszczoną szybę. Po otrzymaniu kolizji wyłącz niezniszczoną wersję i zacznij korzystać z rozbitego panelu.

Jeśli rzucasz jednym oknem (o dość jednolitym rozmiarze) w okno, możesz uzyskać długą drogę dzięki swojemu modelowi 3D złamanej szyby (modeluj odłamki na miejscu w szybie, a następnie uruchom prostą symulację fizyki na każdym z okien odłamki, aby zasymulować ich spadanie / latanie). O ile kamera nie jest bardzo blisko (lub w zwolnionym tempie), nie powinieneś robić kolizji między elementami - tylko z otaczającą geometrią (płaszczyzna podłoża?). Nie zapomnij rozpylić efektów cząsteczkowych na chmurę mniejszych cząstek szkła, które towarzyszą rozbiciu.

Jeśli zrobisz pękniętą szybę przy założeniu, że kamień uderza w środek, możesz przeskalować elementy na podstawie rzeczywistej pozycji trafienia, aby uzyskać całkiem dobrze wyglądającą przerwę dla większości trafień.


2

Jeśli pobierzesz bibliotekę fizyki pocisków, zawiera ona próbkę zawierającą tłuczone szkło, a będziesz potrzebować czegoś takiego jak kula w każdej grze z tłuczonym szkłem.

Edycja: Pocisk byłby świetną demonstracją do modelowania własnego silnika.


1

Bardzo dziękuję za odpowiedzi i bezcenną pomoc. W końcu udało mi się zbudować projekt. Wypróbowałem wszystkie twoje sugestie i ostatecznie wybrałem częściowo własną drogę do tej symulacji.

Użyłem bulledsharp (otoki fizyki pocisków dla c #) do silnika fizyki, ale ważne jest, aby używać najnowszego, skompilowanego przez siebie ze źródłem bulletsharp ze sourceforge svn, a także ze świeżymi źródłami fizyki pocisków. Nie ten wstępnie skompilowany plik .dll, dostępny do pobrania ze stron internetowych. Wersja wstępnie skompilowana była dla mnie za stara i nie zawierała niektórych cennych funkcji, które były dalej rozwijane. Dowiedziałem się również, że w przypadku prostych symulacji, w których nie potrzebujesz zaawansowanej grafiki, lepiej jest używać starszego programu 3dsmax, tj. 2011 (nie najnowszego z 2012 r.), Do opracowania modelu itp. Głównie dlatego, że jest więcej wtyczek i eksporterów. Co więcej, naprawdę pomocne jest sprawdzenie samouczków we wszystkich dostępnych frameworkach (sharpdx, xna, xna4, slimdx, c ++ i inne).

Wreszcie, moim podejściem było zbudowanie szklanej ściany przy użyciu naprawdę małych kawałków kostki. Oczywiście, aby uruchomić symulację, musisz mieć naprawdę potężną maszynę. Jeśli masz coś mniej potężnego, możesz użyć większych kostek. Ważne jest, aby wszystkie kostki utworzone ze stanu wysp sypialnych. Teraz każdy element ma swoją reprezentację w dwóch wymiarowych szeregach pływaków. Liczba wskazuje, jaka jest siła połączenia między dwiema kostkami. Kiedy kamień zostanie rzucony i wykryte zostanie zderzenie, obliczana jest siła dla każdego sześcianu w ścianie (w tym masa kamienia i prędkość, masa i rozmiar kostki oraz odległość od środka zderzenia) i odejmowane od układu w kole podobny wzór. Aktywowane są te kostki, które po odjęciu mają zerową lub mniejszą siłę połączenia. To powoduje ruch młodych.

To jest to. Dzięki za pomoc.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.