Rysowanie cząstek w postaci gładkiej kropelki

12

Jestem nowy w tworzeniu gier / grafiki i gram z cząstkami (w 2D). Chcę przyciągać cząsteczki blisko siebie jak kroplę, podobnie jak ciecz / woda. Nie chcę rysować nakładających się dużych kół, ponieważ kropelka nie będzie gładka (i zbyt duża). Tak naprawdę nie znam fizyki, ale zakładam, że chcę czegoś podobnego do napięcia powierzchniowego.

Nie udało mi się znaleźć niczego na stosie wymiany lub w Google (może nie znam poprawnych słów kluczowych?). Do tej pory znalazłem dwa możliwe rozwiązania, ale nie jestem w stanie znaleźć żadnych konkretnych informacji na temat algorytmów.

Jednym z nich jest obliczenie wklęsłego kadłuba cząstek, które uważam za kropelki. Mogę obliczyć obiekt blob, tworząc klasę równoważności (w relacji „blisko siebie”). O dziwo, nie udało mi się znaleźć żadnego algorytmu wyjaśniającego, jak obliczyć kadłub wklęsły. Wiele postów (i między stackexchange) prowadzi do bibliotek lub produktów komercyjnych, które to robią (potrzebuję bibliotek do pracy w C #), ale nigdy żadnego algorytmu. Również to rozwiązanie może mieć problem z kołem cząstek, który nie wykryłby pustej przestrzeni pośrodku.

Badając wklęsły kadłub natknąłem się na coś, co nazywa się kształtami alfa. To wydaje się być dokładnie tym, co chcę robić, jednak tak jak w przypadku wklęsłego kadłuba nie znalazłem żadnego źródła wyjaśniającego, jak one faktycznie działają. Znalazłem trochę materiałów do prezentacji, ale za mało, aby kontynuować. To jak wielka tajemnica, którą znają wszyscy oprócz mnie: - /

Po obliczeniu wklęsłego kadłuba lub kształtu alfa chcę zrobić z niego krzywą Béziera, aby była gładka i ładna.

Chociaż uważam, że moje podejście jest zbyt skomplikowane, może próbuję rozwiązać to w niewłaściwy sposób? Jeśli możesz zasugerować inne rozwiązanie mojego problemu lub wyjaśnić brakujące elementy, byłbym bardzo szczęśliwy i wdzięczny :-)

Dzięki.

Nömmik
źródło
stackoverflow.com/questions/83593/…
BlueRaja - Danny Pflughoeft
@BlueRaja Dzięki za komentarz. Chociaż już znalazłem ten post, ale go odrzuciłem, ponieważ odpowiedzi albo prowadzą do dokumentów, które nie rozwiązują bezpośrednio mojego problemu, ale ich odnośniki mogą lub patent, z którego nie mogę korzystać otwarcie (myślę, że nie jestem dobry z biurokracją) (I tak nawet nie znalazłem linku do pobrania).
Nömmik,
1
Patent na „marszowe kostki” wygasł w 2005 r., Większość przykładów 2D jest znacznie starszych i dlatego być może widzieliście, jak ostrzegają przed użyciem ich na starych stronach internetowych.
Patrick Hughes,
1
Oto artykuł gamedev, który dotyczy zarówno metaballi, jak i izosurfaces, z kilkoma próbkami wyjaśniającymi pomysły: link
Patrick Hughes
Dzięki za pouczenie mnie o metaballach, wydają się robić to, co chcę :-)
Nömmik

Odpowiedzi:

8

Słowo kluczowe, które może być potrzebne, to „Metaballs” i obejmuje zarówno złożoną próbkę Klejnotów GPU nVidia, jak i wersje napędzane scenami demonstracyjnymi, zaprojektowane tylko po to, by wyglądać dobrze i działać szybko.

Patrick Hughes
źródło
Rzeczywiście, nie znałem słowa kluczowego :-) Przyjrzę się mu bliżej i jeśli wydaje się, że jest to, czego potrzebuję, to zaakceptuję twoją odpowiedź. Dzięki!
Nömmik
1
+1 dla mnie myśląc, że to były „klopsiki”, zanim przeczytałem to po raz drugi.
James
2
Czy możesz dodać nieco więcej szczegółów do tej odpowiedzi? +1, jeśli tak.
AttackingHobo
@ James Myślę, że wszyscy popełniają ten błąd, kiedy widzą to słowo po raz pierwszy!
Jeff
1

Aby przekonwertować grupę cząstek na siatkę w celu renderowania w stylu metaball, możesz przyjrzeć się algorytmowi Marching Cubes , który generuje siatkę wielokątną z danych wokseli. Jest demoscene demo, które ma świetny przykład, ze wszystkim, co generowane jest na GPU: numb res .

thekidder
źródło