Difference between revisions of "File Formats"

From Mod Wiki
 
 
Line 1: Line 1:
=== Simple Types ===
 
These are all stored as little-endian
 
  
----
 
 
* bool = 1 byte
 
* unsigned char = 1 byte
 
* int = 4 bytes
 
* float = 4 bytes
 
 
=== Compound types ===
 
 
----
 
 
* vec3 = float x, float y, float z
 
* bounds = vec3 mins, vec3 maxs
 
* string = int length, char[ length ]
 
 
 
=== File Structure ===
 
  chunk id;
 
  chunk data;
 
  ...
 
  chunk id;
 
  chunk data;
 
 
=== Chunks needed for loading geometry data ===
 
----
 
 
==== Material Table ====
 
  material chunk {
 
    string id = "materials";
 
    int numMaterials;
 
    string array[ numMaterials ];
 
  }
 
 
==== Model Chunk ====
 
  model chunk {
 
    string id = "model";
 
    int chunkLength;
 
    string name;
 
   
 
    int numSurfaces;
 
    int numAreas;
 
    int array[ numAreas ];
 
   
 
    for each of numSurfaces {
 
        int materialIndex;
 
        bool hasVertexColor;
 
        bounds surfaceBounds;
 
       
 
        int numVerts;
 
        int numIndices;
 
        int __privateCount;
 
       
 
        for each of numVerts {
 
            int numVertexElements;  // should always be 12
 
            float vertex[ numVertexElements ];
 
           
 
            int numColorElements;  // should always be 4
 
            unsigned char color[ numColorElements ];
 
            // if hasVertexColor is true, use the color read above; otherwise the color is "255 255 255 255"
 
           
 
            // vertex[ 0 ] - x
 
            // vertex[ 1 ] - y
 
            // vertex[ 2 ] - z
 
   
 
            // vertex[ 3 ] - s
 
            // vertex[ 4 ] - t
 
   
 
            // vertex[ 5 ] - normal x
 
            // vertex[ 6 ] - normal y
 
            // vertex[ 7 ] - normal z
 
           
 
            // vertex[ 8 ] - tangent x
 
            // vertex[ 9 ] - tangent y
 
            // vertex[ 10 ] - tangent z   
 
            // vertex[ 11 ] - bitangent sign
 
        }
 
        for each of numIndices {
 
            int index;
 
        }
 
       
 
        for each of __privateCount {
 
            float __private[ 6 ];
 
            int __private;
 
            int __private;
 
            int __private;
 
            int __private;     
 
        }
 
    } 
 
  }
 
 
  all_other_chunks {
 
    string id;
 
    int chunkLength;
 
    <skip ahead by chunklength to get to the next chunk>
 
  }
 

Latest revision as of 19:11, 11 December 2007