Partikel als glatten Klecks zeichnen


12

Ich bin neu in der Spiele- / Grafikentwicklung und spiele mit Partikeln (in 2D). Ich möchte Partikel als Klecks genau wie Flüssigkeit / Wasser nahe beieinander zeichnen. Ich möchte keine großen Kreise zeichnen, die sich überlappen, da der Blob nicht glatt (und zu groß) ist. Ich kenne mich nicht wirklich mit Physik aus, aber ich gehe davon aus, dass ich etwas möchte, das der Oberflächenspannung ähnelt.

Ich konnte weder bei stackexchange noch bei Google etwas finden (kenne ich möglicherweise nicht die richtigen Keywords?). Bisher habe ich zwei mögliche Lösungen gefunden, aber ich kann keine konkreten Informationen über Algorithmen finden.

Eine davon ist die Berechnung der konkaven Partikelhülle, die ich als Blob betrachte. Ich kann den Blob berechnen, indem ich eine Äquivalenzklasse erstelle (für die Beziehung "nah beieinander"). Seltsamerweise konnte ich keinen Algorithmus finden, der erklärt, wie der konkave Rumpf berechnet wird. Viele Posts (und unter stackexchange) verlinken auf Bibliotheken oder kommerzielle Produkte, die dies tun (ich brauche Bibliotheken, um in C # zu arbeiten), aber niemals einen Algorithmus. Auch diese Lösung könnte ein Problem mit einem Partikelkreis haben, der den leeren Raum in der Mitte nicht erkennt.

Während ich nach konkaven Hüllen suchte, stieß ich auf etwas, das Alpha-Formen genannt wurde. Das scheint genau das zu sein, was ich tun möchte, aber genau wie bei der konkaven Hülle habe ich keine Quelle gefunden, die erklärt, wie sie tatsächlich funktionieren. Ich habe einige Präsentationsmaterialien gefunden, aber nicht genug, um fortzufahren. Es ist wie ein großes Geheimnis, das jeder außer mir kennt: - /

Nachdem ich die konkave Rumpf- oder Alpha-Form berechnet habe, möchte ich eine Bézier-Kurve erstellen, um sie glatt und schön zu machen.

Obwohl ich meine Herangehensweise für etwas zu komplex halte, versuche ich vielleicht, dies auf die falsche Weise zu lösen? Wenn Sie eine andere Lösung für mein Problem vorschlagen oder die fehlenden Teile erklären können, wäre ich sehr glücklich und dankbar :-)

Vielen Dank.



@ BlueRaja Vielen Dank für Ihren Kommentar. Ich hatte diesen Beitrag zwar schon gefunden, ihn aber verworfen, weil die Antworten entweder auf Artikel verweisen, die mein Problem nicht direkt lösen, aber auf Verweise oder auf ein Patent, das ich nicht offen verwenden kann (ich glaube, ich bin nicht gut mit Bürokratie) (Ich habe den Download-Link sowieso nicht gefunden).
Nömmik

1
Das "Marching Cubes" -Patent ist 2005 abgelaufen, die meisten 2D-Beispiele sind viel älter und daher haben Sie möglicherweise eine Warnung vor ihrer Verwendung auf alten Webseiten erhalten.
Patrick Hughes

1
Hier ist ein Spielev-Artikel, der sowohl Metabälle als auch Isoflächen behandelt. Einige Beispiele sollen die Ideen verdeutlichen: Link
Patrick Hughes

Vielen Dank, dass Sie mich über Metaballs aufgeklärt haben. Sie scheinen zu tun, was ich will :-)
Nömmik

Antworten:


8

Das Schlüsselwort, das Sie möglicherweise benötigen, lautet "Metaballs" und reicht vom komplexen nVidia GPU Gems-Beispiel bis hin zu den Demoversionen, die nur gut aussehen und schnell laufen sollen.


Tatsächlich kannte ich das Schlüsselwort nicht :-) Ich werde es mir genauer ansehen und wenn es so scheint, als ob es das ist, was ich brauche, werde ich Ihre Antwort annehmen. Vielen Dank!
Nömmik

1
+1 für mich dachte, das war "Frikadellen", bevor ich es ein zweites Mal las.
James

2
Könnten Sie dieser Antwort etwas mehr Details hinzufügen? +1 wenn du tust.
AttackingHobo

@ James Ich denke, jeder macht diesen Fehler, wenn er das Wort zum ersten Mal sieht!
Jeff

1

Um eine Gruppe von Partikeln in ein Netz zu konvertieren, das im Metaballs-Stil gerendert werden kann, sehen Sie sich den Marching Cubes- Algorithmus an, der aus Voxeldaten ein polygonales Netz generiert. Es gibt eine Demoszene-Demo mit einem großartigen Beispiel dafür, bei der alles auf der GPU generiert wird: numb res .


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.