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:
- Ein Manager, der sowohl alle Ihre Systeme im Auge behält als auch alle Effekte global kontrolliert.
- Array von "Punkten", an denen Position, Geschwindigkeit, Lebensdauer und Anzeigegröße angegeben sind.
- Eine Funktion zum Erstellen dieses Arrays mit einer Startposition und (wahrscheinlich) zufälligen Geschwindigkeiten und Lebenszeiten.
- Eine Funktion zum Ausführen einer Simulation auf diesem Array. Dies dauert wahrscheinlich eine Delta-Zeit seit dem letzten Simulationsaufruf.
- Eine Funktion, um die Positionen und Anzeigegrößen zu übernehmen und dann in OpenGL anzuzeigen.
- 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.