[Projekt] GFX Game Engine / Framework
Verfasst: 31.10.2023, 16:13
Hallo, gerne möchte ich mein Hobbyprojekt vorstellen. Es handelt sich um eine einfache Game Engine, die ich vor einigen Jahren begonnen habe zu entwickeln. Anfangs war das Framework in Java geschrieben und verwendete den üblichen Graphics2D Context zur Darstellung von 2D-Grafiken. 3D-Unterstützung war zu diesem Zeitpunkt noch nicht geplant und ist es ehrlich gesagt bis heute nicht.
Allerdings entwickelt man sich im Laufe der Zeit weiter und möchte neue Dinge lernen und in das Framework integrieren. Daher habe ich vor 3-4 Jahren beschlossen, die alte Java Engine in JavaFX neu zu erstellen. Ein großer Vorteil war, dass automatisch die beste Render-Pipeline verwendet wurde. Allerdings brachte JavaFX auch neue Herausforderungen mit sich. Es war eine Herausforderung, Spiele, die damit erstellt wurden, zu veröffentlichen, besonders nachdem Oracle JavaFX aus dem SDK genommen und ein eigenständiges Modul daraus gemacht hatte.
Es war also schnell klar, dass ich, wenn ich das Framework wirklich für kleine und mittelgroße Projekte verwenden möchte, nicht um eine solide Programmiersprache und vor allem um einen geeigneten Grafikkontext herumkomme. Da ich bereits etwas Erfahrung mit OpenGL hatte, war DirectX schnell aus dem Rennen. Als Programmiersprachen standen C++ und C# zur Auswahl. Da ich plane, die Spiele, die ich mit dem Framework entwickeln möchte, nur für Windows zu veröffentlichen, habe ich mich für C# entschieden, um mir Arbeit zu ersparen.
Damit waren die Programmiersprache und der Renderer für die Neuauflage der Engine bzw. des Frameworks festgelegt und ich begann mit der Neuentwicklung. Ein wichtiger Aspekt war für mich, flexibel beim Rendern zu bleiben. Ich wollte keinen festen Renderer verwenden, sondern ein Template, das es mir ermöglicht, später auch andere APIs oder Render-Technologien zu nutzen, ohne die Engine komplett neu beginnen zu müssen. Nach wenigen Wochen war das Framework soweit, dass ich effektiv an kleinen Spielen arbeiten konnte, unterstützt durch Classic GL.
Heute arbeite ich immer noch an der Engine und bin gerade dabei, ein neues Render Device für OpenGL4 zu erstellen. Dies ermöglicht eine effizientere Darstellung von 2D-Szenen und vor allem auch die Erstellung von 3D-Szenen. Folgende Funktionen existieren zum aktuellen Zeitpunkt:
Screenshots
Beispiel Code
Allerdings entwickelt man sich im Laufe der Zeit weiter und möchte neue Dinge lernen und in das Framework integrieren. Daher habe ich vor 3-4 Jahren beschlossen, die alte Java Engine in JavaFX neu zu erstellen. Ein großer Vorteil war, dass automatisch die beste Render-Pipeline verwendet wurde. Allerdings brachte JavaFX auch neue Herausforderungen mit sich. Es war eine Herausforderung, Spiele, die damit erstellt wurden, zu veröffentlichen, besonders nachdem Oracle JavaFX aus dem SDK genommen und ein eigenständiges Modul daraus gemacht hatte.
Es war also schnell klar, dass ich, wenn ich das Framework wirklich für kleine und mittelgroße Projekte verwenden möchte, nicht um eine solide Programmiersprache und vor allem um einen geeigneten Grafikkontext herumkomme. Da ich bereits etwas Erfahrung mit OpenGL hatte, war DirectX schnell aus dem Rennen. Als Programmiersprachen standen C++ und C# zur Auswahl. Da ich plane, die Spiele, die ich mit dem Framework entwickeln möchte, nur für Windows zu veröffentlichen, habe ich mich für C# entschieden, um mir Arbeit zu ersparen.
Damit waren die Programmiersprache und der Renderer für die Neuauflage der Engine bzw. des Frameworks festgelegt und ich begann mit der Neuentwicklung. Ein wichtiger Aspekt war für mich, flexibel beim Rendern zu bleiben. Ich wollte keinen festen Renderer verwenden, sondern ein Template, das es mir ermöglicht, später auch andere APIs oder Render-Technologien zu nutzen, ohne die Engine komplett neu beginnen zu müssen. Nach wenigen Wochen war das Framework soweit, dass ich effektiv an kleinen Spielen arbeiten konnte, unterstützt durch Classic GL.
Heute arbeite ich immer noch an der Engine und bin gerade dabei, ein neues Render Device für OpenGL4 zu erstellen. Dies ermöglicht eine effizientere Darstellung von 2D-Szenen und vor allem auch die Erstellung von 3D-Szenen. Folgende Funktionen existieren zum aktuellen Zeitpunkt:
- Rendern von 2D-Sprites mit ClassicGL und ModernGL
- Rendern von 3D-Modellen mit ModernGL
- Diffuses Licht in 3D-Szenen
- Importieren von Wavefront-Modellen
- Physiksimulation und Kollisionserkennung mit BulletSharp (ein Wrapper für Bullet)
- Dynamisches Kamerasystem
- Abstraktes Entity-System, bei dem jedem Entity (GameElement) beliebig viele Verhaltensweisen zugewiesen werden können.
- Einfaches Asset-Loading
Screenshots