Software-Wiki
(Vorlagen raus/rein)
Markierung: sourceedit
(Links zur Wikipedia korrigieren)
Markierung: sourceedit
 
Zeile 7: Zeile 7:
 
|Entwickler = [http://www.zfx.info/ ZFX-Community]
 
|Entwickler = [http://www.zfx.info/ ZFX-Community]
 
|Version= 0.3.0
 
|Version= 0.3.0
|Lizenz = [[GNU Lesser General Public License|LGPL]] ([[Freie Software]])
+
|Lizenz = [[wikipedia:de:GNU Lesser General Public License|LGPL]] ([[wikipedia:de:Freie Software|Freie Software]])
 
|Sonstiges=
 
|Sonstiges=
 
|Website = [http://zfxce2.sourceforge.net/ ZFX-Community Engine]
 
|Website = [http://zfxce2.sourceforge.net/ ZFX-Community Engine]
 
}}
 
}}
Die '''ZFX Community Engine''' (kurz: ''ZFXCE'') ist eine unter der [[GNU Lesser General Public License]] stehende [[Freie Software|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. Mittlerweile ist eine zweite Version in Planung <ref>http://sourceforge.net/projects/zfxce2/, abgerufen am 21. August 2011</ref>.
+
Die '''ZFX Community Engine''' (kurz: ''ZFXCE'') ist eine unter der [[wikipedia:de:GNU Lesser General Public License|GNU Lesser General Public License]] stehende [[wikipedia:de:Freie Software|freie]] [[wikipedia:de:Grafik-Engine|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 [[wikipedia:de:POSIX|POSIX]]-Systemen als auch unter [[wikipedia:de:Windows|Windows]] genutzt werden. Mittlerweile ist eine zweite Version in Planung <ref>http://sourceforge.net/projects/zfxce2/, abgerufen am 21. August 2011</ref>.
   
 
== Die Geschichte ==
 
== 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.
+
Das Forum der ZFX ist ein Forum für Grafik- bzw. Hobby-Programmierer. Dort werden viele Fragen zu [[wikipedia:de:DirectX|DirectX]] und [[wikipedia:de:OpenGL|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.
 
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.
 
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 Module ==
Die Engine ist in verschiedenen Modulen, welche effektiv als [[Programmbibliothek]] vorliegen, unterteilt. Jede davon kann einzeln genutzt werden.
+
Die Engine ist in verschiedenen Modulen, welche effektiv als [[wikipedia:de:Programmbibliothek|Programmbibliothek]] vorliegen, unterteilt. Jede davon kann einzeln genutzt werden.
   
 
Die wichtigsten Module sind:
 
Die wichtigsten Module sind:
   
 
=== Core ===
 
=== Core ===
* Object System (Object Names, [[Referenzzählung|Reference Counting]], Basis RTTI-Informationen)
+
* Object System (Object Names, [[wikipedia:de:Referenzzählung|Reference Counting]], Basis RTTI-Informationen)
* Debugtools ([[Assert]]s und Warnungen, Callstack, [[Exception]]s)
+
* Debugtools ([[wikipedia:de:Assert|Assert]]s und Warnungen, Callstack, [[wikipedia:de:Exception|Exception]]s)
 
* Profiling Tools (Timer, Call-Counter und Statistik über benötigte Zeit)
 
* Profiling Tools (Timer, Call-Counter und Statistik über benötigte Zeit)
 
* Memory Manager (Log von Speicherlecks, Bounding Checks, Freelist-Allokatoren)
 
* Memory Manager (Log von Speicherlecks, Bounding Checks, Freelist-Allokatoren)
* Vorlagen für Design Pattern ([[Singleton (Entwurfsmuster)|Singleton]], [[Visitor]], [[Intelligenter Zeiger|Smart Pointer]], [[Funktor]]en, Manager, Factory)
+
* Vorlagen für Design Pattern ([[wikipedia:de:Singleton (Entwurfsmuster)|Singleton]], [[wikipedia:de:Visitor|Visitor]], [[wikipedia:de:Intelligenter Zeiger|Smart Pointer]], [[wikipedia:de:Funktor|Funktor]]en, Manager, Factory)
 
* Resource-System (Resource-Management, Laden / Speichern, Definition und Registrierung eigener Resource-Factories)
 
* Resource-System (Resource-Management, Laden / Speichern, Definition und Registrierung eigener Resource-Factories)
* Modul-Manager (Management von Dlls/SOs, [[Plugin]]-Verwaltung)
+
* Modul-Manager (Management von Dlls/SOs, [[wikipedia:de:Plugin|Plugin]]-Verwaltung)
* Multi-Thread-Unterstützung ([[Semaphor (Informatik)|Semaphoren]], [[Mutex]]e, [[Race Condition]]s, Task Manager)
+
* Multi-Thread-Unterstützung ([[wikipedia:de:Semaphor (Informatik)|Semaphoren]], [[wikipedia:de:Mutex|Mutex]]e, [[wikipedia:de:Race Condition|Race Condition]]s, Task Manager)
   
 
=== Math ===
 
=== Math ===
Zeile 38: Zeile 38:
 
* Vector4 (4D-Vektor-Implementierung)
 
* Vector4 (4D-Vektor-Implementierung)
 
* 4×4 Matrix (4×4-Matrix-Implementierung)
 
* 4×4 Matrix (4×4-Matrix-Implementierung)
* [[Quaternion]]
+
* [[wikipedia:de:Quaternion|Quaternion]]
* [[Ray]]
+
* [[wikipedia:de:Ray|Ray]]
* [[Plane]]
+
* [[wikipedia:de:Plane|Plane]]
* [[Axis Aligned Bounding Box]]
+
* [[wikipedia:de:Axis Aligned Bounding Box|Axis Aligned Bounding Box]]
* [[Object oriented Bounding Box]]
+
* [[wikipedia:de:Object oriented Bounding Box|Object oriented Bounding Box]]
* [[View Frustum]]
+
* [[wikipedia:de:View Frustum|View Frustum]]
   
 
=== Geometry ===
 
=== Geometry ===
Zeile 51: Zeile 51:
 
* Q2-Modell-Format (Grober Import vorhanden (experimentell))
 
* Q2-Modell-Format (Grober Import vorhanden (experimentell))
   
=== [[Bildsynthese|Renderer]] ===
+
=== [[wikipedia:de:Bildsynthese|Renderer]] ===
* Implementierungen für [[OpenGL]] und D3D9
+
* Implementierungen für [[wikipedia:de:OpenGL|OpenGL]] und D3D9
 
* Primitive (Points, Lines, Triangles, Trianglestrips)
 
* Primitive (Points, Lines, Triangles, Trianglestrips)
* [[Textur (Computergrafik)|Texturieren]]
+
* [[wikipedia:de:Textur (Computergrafik)|Texturieren]]
 
* Multitexturing (zur Zeit nur Lightmap-Unterstützung)
 
* Multitexturing (zur Zeit nur Lightmap-Unterstützung)
 
* Einfache Stencil-Schatten
 
* Einfache Stencil-Schatten
Zeile 64: Zeile 64:
 
* MainApp (Root-Objekt der ZFXCE-Engine)
 
* MainApp (Root-Objekt der ZFXCE-Engine)
   
=== [[Szenengraph|SceneGraph]] ===
+
=== [[wikipedia:de:Szenengraph|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.
 
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.
 
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)
 
* Camera (First Person Camera, Setzen eigener Projektionsmatrix)
* [[Frustum Culling]] für AABB (Frustum Culling für einfache Meshes mit einer AABB)
+
* [[wikipedia:de:Frustum Culling|Frustum Culling]] für AABB (Frustum Culling für einfache Meshes mit einer AABB)
 
* Scenenode (Visualisierung eines statischen Meshes)
 
* Scenenode (Visualisierung eines statischen Meshes)
 
* GUINode (Einbettung von GUI-Elementen in die Szene)
 
* GUINode (Einbettung von GUI-Elementen in die Szene)
 
* DOFNode (Animation kompletter Scenenode-Hierarchien)
 
* DOFNode (Animation kompletter Scenenode-Hierarchien)
* Octree ([[Culling]] per [[Octree]])
+
* Octree ([[wikipedia:de:Culling|Culling]] per [[wikipedia:de:Octree|Octree]])
 
* Waternode (Scenenode zur Repräsentanz von Flüssigkeitsoberflächen)
 
* Waternode (Scenenode zur Repräsentanz von Flüssigkeitsoberflächen)
 
* Terrainnode (Scenenode zur Repräsentanz von Terrain)
 
* Terrainnode (Scenenode zur Repräsentanz von Terrain)
Zeile 81: Zeile 81:
 
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:
 
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)
 
* Input/Output (Datei-Abstraktionsschicht)
* Archive (Archiv-Unterstützung für GZ- und [[zlib]])
+
* Archive (Archiv-Unterstützung für GZ- und [[wikipedia:de:zlib|zlib]])
 
* VFSystem (Virtuelles Dateisystem für Ressourcen, Modulen, Plugins mit Mounting)
 
* VFSystem (Virtuelles Dateisystem für Ressourcen, Modulen, Plugins mit Mounting)
   
=== [[Skriptsprache|Scripting]] ===
+
=== [[wikipedia:de:Skriptsprache|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 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]])
+
* Scripting von Klassen (Ansteuerung interner Engine-Elemente per [[wikipedia:de:LUA|LUA]])
   
 
== Literatur ==
 
== Literatur ==

Aktuelle Version vom 8. Mai 2015, 17:36 Uhr

ZFX-Community Engine
Bezier quake3 release2
Entwickler ZFX-Community
Aktuelle Version 0.3.0
Freigabedatum 30. Dezember 2007
Lizenz LGPL (Freie Software)
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. Mittlerweile ist eine zweite Version in Planung [1].

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[]

Geometry[]

Um verschiedene Levelformate für die ZFXCE nutzen zu können, wird ein 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[]

Einzelnachweise[]

  1. http://sourceforge.net/projects/zfxce2/, abgerufen am 21. August 2011


Info Sign  Dieser Wikipedia-Artikel wurde gemäß GFDL bzw. CC-by-sa mit allen Versionen importiert.