Difference between revisions of "RpGeometry"
(Cleaned up a bit) |
(→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.) |
||
Line 11: | Line 11: | ||
The format of the Geometry's Struct chunk is as follows: | The format of the Geometry's Struct chunk is as follows: | ||
− | + | int16 format (see [[RpGeometry#Format|below]]) | |
+ | int8 number of texture coordinate sets (numTexSets) | ||
+ | int8 native geometry flags (see [[RpGeometry#Native Geometry|below]]) | ||
int32 number of triangles (numTriangles) | int32 number of triangles (numTriangles) | ||
int32 number of vertices (numVertices) | int32 number of vertices (numVertices) | ||
Line 22: | Line 24: | ||
#endif | #endif | ||
− | #if | + | #if nativeGeometry == 0 |
#if (format & rpGEOMETRYPRELIT) | #if (format & rpGEOMETRYPRELIT) | ||
RwRGBA prelitcolor[numVertices] (RwRGBA: uint8 r, g, b, a) | RwRGBA prelitcolor[numVertices] (RwRGBA: uint8 r, g, b, a) | ||
Line 57: | Line 59: | ||
!Description | !Description | ||
|- | |- | ||
− | | | + | |0x0001||rpGEOMETRYTRISTRIP||Is [[wikipedia:Triangle_strip|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. | 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 PLG (RW Section)|Native Data]] chunk. | If rpGEOMETRYNATIVE is set, the platform dependent geometry data is to be found in the [[Native Data PLG (RW Section)|Native Data]] chunk. | ||
Revision as of 00:07, 15 August 2016
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:
- Bin Mesh PLG
- Native Data PLG – (Only for consoles)
- Skin PLG
- Breakable
- Extra Vert Colour
- Morph PLG
- 2d Effect