Skip to content
Shihan edited this page Mar 17, 2020 · 1 revision

Table of Contents

Allgemeines

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.

Aufbau

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

Header

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
Die Flags der Vertexkomponenten in nmesh2.h passen offensichtlich nicht auf das Vertexformat von Drakensang, da mehr als die zwölf definierten Flags gesetzt sind. Das Format in den Nebula3-Headern passt eher.

Gruppe

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

Vertex

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.

Dreieck

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