RpGeometry

From GTAMods Wiki
Revision as of 00:07, 15 August 2016 by Slipyx (talk | contribs) (Stream structure: Reverted structure layout that lists format as 16bit and then the two 8bit values for UV sets and native geometry flags. Moved rpGEOMETRYNATIVE information to separate section.)
Jump to navigation Jump to search


RpGeometry is a RenderWare structure that stores geometric data.

Stream structure

{{{NAME}}}
RenderWare Stream Section
Vendor {{{VENDORNAME}}}
Module {{{MODULENAME}}}
Module ID 0x{{{MODULEID}}}
Identifier 0x{{{IDENTIFIER}}}
Chunk ID 0x{{{MODULEID}}}{{{IDENTIFIER}}}
Versions All
Hierarchy
Parents:
None
Children:
None
Extensions:
None
File Format

When streamed in/out it is usually the child of a Geometry List chunk and the parent of a Struct, Material List and Extension chunk.

The format of the Geometry's Struct chunk is as follows:

int16        format (see below)
int8         number of texture coordinate sets (numTexSets)
int8         native geometry flags (see below)
int32        number of triangles (numTriangles)
int32        number of vertices (numVertices)
int32        number of morph targets (numMorphTargets) (morphing is not used in GTA series, so this is always 1)
#if version < 0x34000
  surface properties:
    float32  ambient
    float32  specular
    float32  diffuse
#endif

#if nativeGeometry == 0
    #if (format & rpGEOMETRYPRELIT)
        RwRGBA   prelitcolor[numVertices] (RwRGBA: uint8 r, g, b, a)
    #endif

    #if format & (rpGEOMETRYTEXTURED | rpGEOMETRYTEXTURED2)
        #repeat numTexSets (see below)
            RwTexCoords    texCoords[numVertices]  (RwTexCoords: float32 u, v)
        #endrepeat
    #endif
   
    RpTriangle   triangles[numTriangles]  (RpTriangle: uint16 vertex2, vertex1, materialId, vertex3)
#endif

#repeat numMorphTargets
    RwSphere    boundingSphere    (RwSphere: float32 x, y, z, radius)
    bool32      has vertices
    bool32      has normals
    #if has vertices
        RwV3d   vertices[numVertices] (RwV3d: float32 x, y, z)
    #endif
    #if has normals
        RwV3d   normals[numVertices]
    #endif
#endrepeat

Format

The following flags describe the behaviour of the mesh during the rendering progress. Some of the flags indicate the existence of data inside the following file format.

Flag Name Description
0x0001 rpGEOMETRYTRISTRIP Is triangle strip (if disabled it will be an triangle list)
0x0002 rpGEOMETRYPOSITIONS Vertex translation
0x0004 rpGEOMETRYTEXTURED Texture coordinates
0x0008 rpGEOMETRYPRELIT Vertex colors
0x0010 rpGEOMETRYNORMALS Store normals
0x0020 rpGEOMETRYLIGHT Geometry is lit (dynamic and static)
0x0040 rpGEOMETRYMODULATEMATERIALCOLOR Modulate material color
0x0080 rpGEOMETRYTEXTURED2 Texture coordinates 2

The 8 bits after the format description give the number of texture coordinate sets (numTexSets). If the value in the file is zero, rpGEOMETRYTEXTURED means there is one set of texture coordinates, rpGEOMETRYTEXTURED2 means there are two.

Native Geometry

Native geometry flags can be rpGEOMETRYNATIVE (0x1) or rpGEOMETRYNATIVEINSTANCE (0x2). If rpGEOMETRYNATIVE is set, the platform dependent geometry data is to be found in the Native Data chunk.

Extension

The extension of an geometry can hold the following chunks in GTA: