- Zfxce
-
ZFX-Community Engine Basisdaten Entwickler ZFX-Community Version 0.3.0
(30. Dezember 2007)Lizenz LGPL Website ZFX-Community Engine Die ZFX Community Engine (kurz: ZFXCE) ist eine unter der GNU Lesser General Public License stehende freie Grafik-Engine für 3D-Applikationen und Spiele. Sie wird von Mitgliedern der ZFX-Community entwickelt. Die Engine besteht aus verschiedenen C++-Modulen. Sie kann sowohl unter POSIX-Systemen als auch unter Windows genutzt werden.
Inhaltsverzeichnis
Die Geschichte
Das Forum der ZFX ist ein Forum für Grafik- bzw. Hobby-Programmierer. Dort werden viele Fragen zu DirectX und OpenGL diskutiert. Viele Hobbyprogrammierer wünschten sich ein gemeinsames Projekt an dem sie ihr Wissen testen und ebenso Erfahrungen sammeln konnten. So wurde das Projekt einer gemeinsamen Grafik-Engine im Jahr 2002 gegründet. Nach einigen Auf und Ab kristallisierte sich mit der zeit das heute noch aktive Kern-Team bestehend aus Kim Kulling (kimmi), Björn Meier (Salacryl), Andreas Kohn (ankon) und Enrico Zschemisch (enrico) heraus.
Die Module
Die Engine ist in verschiedenen Modulen, welche effektiv als Programmbibliothek vorliegen, unterteilt. Jede davon kann einzeln genutzt werden.
Die wichtigsten Module sind:
Core
- Object System (Object Names, Reference Counting, Basis RTTI-Informationen)
- Debugtools (Asserts und Warnungen, Callstack, Exceptions)
- Profiling Tools (Timer, Call-Counter und Statistik über benötigte Zeit)
- Memory Manager (Log von Speicherlecks, Bounding Checks, Freelist-Allokatoren)
- Vorlagen für Design Pattern (Singleton, Visitor, Smart Pointer, Funktoren, Manager, Factory)
- Resource-System (Resource-Management, Laden / Speichern, Definition und Registrierung eigener Resource-Factories)
- Modul-Manager (Management von Dlls/SOs, Plugin-Verwaltung)
- Multi-Thread-Unterstützung (Semaphoren, Mutexe, Race Conditions, Task Manager)
Math
- Vector2 (2D-Vektor-Implementierung)
- Vector3 (3D-Vektor-Implementierung)
- Vector4 (4D-Vektor-Implementierung)
- 4×4 Matrix (4×4-Matrix-Implementierung)
- Quaternion
- Ray
- Plane
- Axis Aligned Bounding Box
- Object oriented Bounding Box
- View Frustum
Geometry
Um verschiedene Levelformate für die ZFXCE nutzen zu können, wird eine eigenes Mesh-Format in der ZFXCE verwendet. Level- und Charakterdaten werden per VFSystem (Virtual File System) geladen und dann in ein Mesh transformiert. Dieses Mesh kann nun mit eigenen Mitteln sowohl transformiert als auch per Scenegraph dargestellt werden. Dafür muss man nur einen Scenenode generieren und diesem die Mesh-Instanz übergeben. Der Scenegraph kann hiermit alle notwendigen renderspezifischen Daten ermitteln, ohne dass der Anwender mit diesen ZFXCE internen Daten konfrontiert wird.
- Q3-Level-Unterstützung (Statische Mesh-Daten, Lightmaps, Curved Surface-Unterstützung, Shader, Entities)
- Obj-Modell-Format (Statische Modelldaten, Material, Groups)
- Q2-Modell-Format (Grober Import vorhanden (experimentell))
Renderer
- Implementierungen für OpenGL und D3D9
- Primitive (Points, Lines, Triangles, Trianglestrips)
- Texturieren
- Multitexturing (zur Zeit nur Lightmap-Unterstützung)
- Einfache Stencil-Schatten
- Render-to-Texture
MainApp
Die MainApplication-Klasse stellt den Einsprungspunkt für den Anwender dar. Von hier aus hat man Zugriff auf die gesamte Engine, kann Module laden und die ersten Anwendungen implementieren.
- MainApp (Root-Objekt der ZFXCE-Engine)
SceneGraph
In einer 3D-Engine werden prinzipiell nur Dreiecke auf den Bildschirm gezeichnet beziehungsweise gerendert. Darzustellende Objekte repräsentieren die Zusammenfassung von Dreiecken zu 3D-Objekten. Diese Objekte können auch untereinander in Beziehung stehen. Um diese Objekte und ihre Abhängigkeiten so z.B. Hierarchien verwalten zu können, gibt es den Scenegraph. Er stellt die grundlegende Schnittstelle zwischen Anwender und Renderer für die Szene dar. Das Erstellen der Renderdaten aus den geladenen Modellinformationen sowie deren Optimierung ist ebenfalls eine Aufgabe, die der Scenegraph verwaltet.
- Camera (First Person Camera, Setzen eigener Projektionsmatrix)
- Frustum Culling für AABB (Frustum Culling für einfache Meshes mit einer AABB)
- Scenenode (Visualisierung eines statischen Meshes)
- GUINode (Einbettung von GUI-Elementen in die Szene)
- DOFNode (Animation kompletter Scenenode-Hierarchien)
- Octree (Culling per Octree)
- Waternode (Scenenode zur Repräsentanz von Flüssigkeitsoberflächen)
- Terrainnode (Scenenode zur Repräsentanz von Terrain)
Im wesentlichen besteht der Scenegraph aus einem Kompositum, die jeweiligen Aufgaben der Subsystem wie Renderdaten-Generierung aus Geometrieinformationen und Culling wird von Visitoren übernommen.
VFSystem
Die Interaktion mit Dateien wie das Laden und Speichern sowie das Auslesen von physikalischen und logischen Dateien wird über das Virtual File System bearbeitet. Es werden zu diesem Zeitpunkt die folgenden Merkmale unterstützt:
- Input/Output (Datei-Abstraktionsschicht)
- Archive (Archiv-Unterstützung für GZ- und zlib)
- VFSystem (Virtuelles Dateisystem für Ressourcen, Modulen, Plugins mit Mounting)
Scripting
Scripting wird in vielen Spielen dazu benutzt, bestimmte Abläufe zu automatisieren, z.B. kleine Zwischensequenzen, bewegte Elemente, usw. Doch nicht nur deswegen wird immer öfter auf eine Skriptsprache zurückgegriffen. Wie erwähnt, muss ein Skript nicht kompiliert werden, insofern ist Scripting zum Beispiel auch zum Beschreiben einer KI nützlich.
- Scripting von Klassen (Ansteuerung interner Engine-Elemente per LUA)
Literatur
- Kim Kulling, Björn Meier, Enrico Zschemisch: ZFX-Community-Engine: Design und Implementierung, In Proceedings von zfxCON05 – 2. Konferenz zur Computerspieleentwicklung (ISBN 3-939013-00-5)
Weblinks
Wikimedia Foundation.