Difference between revisions of "RpGeometry"
(The triangle indices are all 2 byte integers (asserted in Alastair Burr's original DFF spec [see here http://tinyurl.com/37mflbg] confimed with the current dff modeller i'm writing.) |
m |
||
(25 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | {{RW Section|Geometry| | + | {{RW Section |
+ | | NAME = Geometry | ||
+ | | VENDORNAME = Criterion Games | ||
+ | | MODULENAME = Core | ||
+ | | MODULEID = 000000 | ||
+ | | IDENTIFIER = 0F | ||
+ | | PARENTS = [[Geometry List (RW_Section)|Geometry List]] | ||
+ | | CHILDREN = [[Struct (RW Section)|Struct]], [[Material List (RW_Section)|Material List]] | ||
+ | | EXTENSIONS = [[Bin Mesh PLG (RW Section)|Bin Mesh PLG]], [[Native Data PLG (RW Section)|Native Data PLG]] ''(Consoles only)'', [[Skin PLG (RW Section)|Skin PLG]], [[Breakable (RW Section)|Breakable]], [[Extra Vert Colour (RW Section)|Extra Vert Colour]], [[Morph PLG (RW Section)|Morph PLG]], [[2d Effect (RW Section)|2d Effect]] | ||
+ | }} | ||
− | ''' | + | '''RpGeometry''' is a [[RenderWare]] structure that stores geometric data. |
== Structure == | == Structure == | ||
− | |||
− | + | When streamed in/out it is usually the child of a [[Geometry List (RW_Section)|Geometry List]] chunk and the parent of a [[Struct (RW Section)|Struct]], [[Material List (RW_Section)|Material List]] and [[Extension (RW Section)|Extension]] chunk. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | The format of the Geometry's Struct chunk is as follows: | |
− | + | int32 format (see [[RpGeometry#Format|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 (format & rpGEOMETRYNATIVE) == 0 | ||
+ | #if (format & rpGEOMETRYPRELIT) | ||
+ | RwRGBA prelitcolor[numVertices] (RwRGBA: uint8 r, g, b, a) | ||
+ | #endif | ||
+ | |||
+ | #repeat numTexSets (see [[Geometry (RW Section)#Format|below]]) | ||
+ | RwTexCoords texCoords[numVertices] (RwTexCoords: float32 u, v) | ||
+ | #endrepeat | ||
+ | |||
+ | 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 | + | 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. |
{|{{Prettytable}} width="100%" class="collapsible" | {|{{Prettytable}} width="100%" class="collapsible" | ||
!width="120px"|Flag | !width="120px"|Flag | ||
− | !width="25%"| | + | !width="25%"|Name |
!Description | !Description | ||
|- | |- | ||
− | | | + | |0x00000001||rpGEOMETRYTRISTRIP||Is [[wikipedia:Triangle_strip|triangle strip]] (if disabled it will be an triangle list) |
|- | |- | ||
− | | | + | |0x00000002||rpGEOMETRYPOSITIONS||Vertex translation |
|- | |- | ||
− | | | + | |0x00000004||rpGEOMETRYTEXTURED||Texture coordinates |
|- | |- | ||
− | | | + | |0x00000008||rpGEOMETRYPRELIT||Vertex colors |
|- | |- | ||
− | | | + | |0x00000010||rpGEOMETRYNORMALS||Store normals |
|- | |- | ||
− | | | + | |0x00000020||rpGEOMETRYLIGHT||Geometry is lit (dynamic and static) |
|- | |- | ||
− | | | + | |0x00000040||rpGEOMETRYMODULATEMATERIALCOLOR||Modulate material color |
|- | |- | ||
− | | | + | |0x00000080||rpGEOMETRYTEXTURED2||Texture coordinates 2 |
+ | |- | ||
+ | |0x01000000||rpGEOMETRYNATIVE||Native Geometry | ||
|} | |} | ||
− | + | Bits 16-23 (mask <code>0x00FF0000</code>) in 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 rpGEOMETRYNATIVE is set, the platform dependent geometry data is to be found in the [[Native Data PLG (RW Section)|Native Data]] chunk. | |
− | |||
− | |||
− | {{N|SA|VC}} | + | {{N|SA|VC|3}} |
− |
Latest revision as of 10:58, 14 September 2020
Geometry | |
---|---|
RenderWare Stream Section | |
Vendor | Criterion Games |
Module | Core |
Module ID | 0x000000
|
Identifier | 0x0F
|
Chunk ID | 0x0000000F
|
Versions | All |
Hierarchy | |
Parents: Geometry List | |
Children: Struct, Material List | |
Extensions: Bin Mesh PLG, Native Data PLG (Consoles only), Skin PLG, Breakable, Extra Vert Colour, Morph PLG, 2d Effect | |
File Format |
RpGeometry is a RenderWare structure that stores geometric data.
Structure
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:
int32 format (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 (format & rpGEOMETRYNATIVE) == 0 #if (format & rpGEOMETRYPRELIT) RwRGBA prelitcolor[numVertices] (RwRGBA: uint8 r, g, b, a) #endif #repeat numTexSets (see below) RwTexCoords texCoords[numVertices] (RwTexCoords: float32 u, v) #endrepeat 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 |
---|---|---|
0x00000001 | rpGEOMETRYTRISTRIP | Is triangle strip (if disabled it will be an triangle list) |
0x00000002 | rpGEOMETRYPOSITIONS | Vertex translation |
0x00000004 | rpGEOMETRYTEXTURED | Texture coordinates |
0x00000008 | rpGEOMETRYPRELIT | Vertex colors |
0x00000010 | rpGEOMETRYNORMALS | Store normals |
0x00000020 | rpGEOMETRYLIGHT | Geometry is lit (dynamic and static) |
0x00000040 | rpGEOMETRYMODULATEMATERIALCOLOR | Modulate material color |
0x00000080 | rpGEOMETRYTEXTURED2 | Texture coordinates 2 |
0x01000000 | rpGEOMETRYNATIVE | Native Geometry |
Bits 16-23 (mask 0x00FF0000
) in 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 rpGEOMETRYNATIVE is set, the platform dependent geometry data is to be found in the Native Data chunk.