Wie funktionieren Partikelsysteme?

7

Ich möchte ein Partikelsystem in meinem Spiel implementieren, habe aber noch nie ein Partikelsystem programmiert und weiß nicht, wo ich anfangen soll.

Ich möchte nur Pixel GL_POINTmit unterschiedlichen Größen an verschiedenen Stellen anzeigen , z. B. Terraria oder Minecraft, wenn Sie einen Block ohne Textur treffen. Nur ein absolut einfaches Beispiel.

Die Google-Suchergebnisse hierfür sind in der Regel sehr komplex oder erklären die Konzepte nicht oder sind in schwer lesbarem C ohne OOP geschrieben.

Ich benutze Java und OpenGL.

Puyover
quelle

Antworten:

9

Ich denke, der Schlüsselbegriff ist das Partikelsystem , daher werden die meisten Proben in freier Wildbahn komplexer sein, als Sie es für eine einfache Demonstration halten würden. OOP tritt nicht wirklich in den Low-Level-Teil von Partikelsystemen ein und C ist sehr einfach in andere Sprachen zu konvertieren, also würde ich mir darüber keine Sorgen machen.

Der Trick für Partikel besteht darin, dass Sie eine Menge anzeigen möchten und so schnell wie möglich die Arten von Code einfärben, die Sie sehen, da alles auf die eine oder andere Weise optimiert ist.

In seiner einfachsten Form hätte ein Partikelsystem für einen schnellen Spritzeffekt die folgenden Elemente:

  1. Ein Manager, der sowohl alle Ihre Systeme im Auge behält als auch alle Effekte global kontrolliert.
  2. Array von "Punkten", an denen Position, Geschwindigkeit, Lebensdauer und Anzeigegröße angegeben sind.
  3. Eine Funktion zum Erstellen dieses Arrays mit einer Startposition und (wahrscheinlich) zufälligen Geschwindigkeiten und Lebenszeiten.
  4. Eine Funktion zum Ausführen einer Simulation auf diesem Array. Dies dauert wahrscheinlich eine Delta-Zeit seit dem letzten Simulationsaufruf.
  5. Eine Funktion, um die Positionen und Anzeigegrößen zu übernehmen und dann in OpenGL anzuzeigen.
  6. Und schließlich ein Aufseher, der verhindert, dass dieses System spielt, wenn alle Punkte tot sind.

Das Organisieren der Funktionen kann auf höheren Ebenen OOP sein, solange die inneren Schleifen auf der Suche nach Geschwindigkeit für sich bleiben. Super laxe Pseudocode-Sequenz unten, die viele Details auslässt und gerade C-Konzepte mit einem kitschigen OOP mischt und zusammenbringt, aber ich hoffe, es macht Sinn. Das Klassendesign hierfür wäre eine ganz andere Diskussion =)

In Ihrem Beispiel haben Sie einen Stein am Weltstandort getroffen (10, 20, 30). Anschließend rufen Sie den Manager an und bitten ihn, an dieser Stelle ein neues Punktpartikelsystem zu starten. Der Manager fordert dann die PointsClass auf, sich an Position (10,20,30) zu erstellen. Die Klasse ordnet die Lebenszeiten usw. zu und randomisiert sie. Der Manager ruft dann alle aktiven Partikelsysteme, die er für jeden Frame steuert, mit einem Simulationsaufruf auf. Später in diesem Frame fordert es die PointsClass auf, sich in einen GL-Kontext zu zeichnen. Schleife bis fertig.

Patrick Hughes
quelle
Vielen Dank für Ihren Beitrag! Jetzt habe ich klare Vorstellungen dazu. Ich denke, ich werde dem NeHe-Tutorial über Partikelsysteme eine Pause geben.
Puyover
NeHe ist ein großartiger Ort, da werden Sie nichts falsch machen! Viel Glück.
Patrick Hughes