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.
Odpowiedzi:
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.
źródło
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 .
źródło
Jak wspomniano powyżej, myślisz o Metaballs.
To jest świetny artykuł na ten temat z podstawową dyskusją na temat teorii i przykładami.
Odkrywanie metalowych i izosurfaces w 2D
źródło