NVX2
NVX2 speichert binäre Datensätze von 3D-Gittern. Das Format ähnelt im Aufbau entfernt dem Wavefront Object Format. Für die Nebula2-Engine wird das Format im Header nmesh2.h definiert. Drakensang weicht jedoch in einigen Punkten vom Standardformat ab. Hinweise auf diese Abweichungen lassen sich den Headern nvx2streamreader.h und vertexcomponentbase.h von Nebula3 entnehmen.
Eine NVX2-Datei besteht aus einer magic number, einem Header, mehreren Gruppen, und je einer Liste Vertices, Dreiecke und theoretisch auch Kanten. Letztere werden in Drakensang allerdings scheinbar nicht verwendet.
Die Datensätze werden einfach hintereinander gehängt.
- Header
- Gruppen
- Vertices
- Dreiecke
Der Header enthält allgemeine Informationen über das 3D-Gitter.
Feldformat | Nebula2-Name | Bedeutung |
---|---|---|
uint | magic | magic number = '2','X','V','N' |
int | numGroups | Anzahl der Gruppen, idR < 5 |
int | numVertices | Anzahl der Vertices |
int | vertexWidth | Bytes pro Vertex = 9 |
int | numTriangles | Anzahl der Facetten |
int | numEdges | Anzahl der Kanten, idR 0 |
int | vertexComponents | Bitset mit Flags |
Ein 3D-Gitter ist in Gruppen partitioniert. Es kann allerdings auch nur eine Gruppe geben. Jede Gruppe wird durch einen eigenen Datensatz definiert.
Feldformat | Nebula2-Name | Bedeutung |
---|---|---|
int | vertexRangeFirst | Index des ersten Vertex in der Gruppe |
int | vertexRangeNum | Anzahl der Vektoren in der Gruppe |
int | firstTriangle | Index des ersten Dreiecks in der Gruppe |
int | numTriangles | Anzahl der Dreiecke in der Gruppe |
int | firstEdge | Index der ersten Kante in der Gruppe |
int | numEdges | Anzahl der Kanten in der Gruppe |
Vertices sind die Knoten des 3D-Gitters. Sie beschreiben die Position, Shading und Texturierung.
Feldformat | Bedeutung |
---|---|
float | X-Koordinate |
float | Y-Koordinate |
float | Z-Koordinate |
char | unbekannt |
fix8 | X-Komponente der Normale |
fix8 | Y-Komponente der Normale |
fix8 | Z-Komponente der Normale |
fix16 | U-Texturkoordinate |
fix16 | V-Texturkoordinate |
int | unbekannt (vermutl. 3byte-Vektor) |
int | unbekannt (vermutl. 3byte-Vektor) |
int | unbekannt (vermutl. 3byte-Vektor) |
int | unbekannt |
Die fix8 meint chars und fix16 ushorts, die als Fixkommazahlen interpretiert werden und durch 255 bzw. 8191 zu teilen sind.
Die drei ersten unbekannten ints sind vermutlich 3er-Vektoren wie die Normale, da bei ihnen das erste Byte immer null ist.
Dreiecke bilden die Facetten des 3D-Gitters. Drei Vertices bilden jeweils die Ecken eines Dreiecks. Diese Vertices werden durch ihre Nummer, beginnend mit 0, indiziert. Vertices werden nicht etwa Gruppenweise, sondern für die gesamte Datei durchnummeriert.
Feldformat | Bedeutung |
---|---|
ushort | Index des 1. Vertex |
ushort | Index des 2. Vertex |
ushort | Index des 3. Vertex |
Kategorie:Nebula DeviceKategorie:DSA4Kategorie:DSA5Kategorie:DSA5.1Kategorie:Geometrieformat