Geometry (Metroid Prime): Difference between revisions

m
Reverted edits by Antidote (talk) to last revision by [[User:imported>Darkszero|imported>Darkszero]]
No edit summary
Tags: Reverted Visual edit
m (Reverted edits by Antidote (talk) to last revision by [[User:imported>Darkszero|imported>Darkszero]])
Tag: Rollback
 
Line 83: Line 83:
|-
|-
| 0x10
| 0x10
| u32
| u16
| 1
| '''Mantissa'''
| Always 0x8000.
|-
| 0x12
| u16
| 1
| 1
| '''Display List Size'''  
| '''Display List Size'''  
| In order to get the display list size you need to mask this value with 0x7FFFFFFF, the purpose of the topbit isn't known yet
| '''Important: this value is not always reliable'''
|-
|-
| 0x14
| 0x14
Line 137: Line 143:
Note that you'll need to check some settings on the material to read the primitive data properly; the material determines which vertex attributes are present. The material also determines whether the surface is using lightmaps; if it is, then the first UV coordinate will be read out of the short UV array instead of the float one.
Note that you'll need to check some settings on the material to read the primitive data properly; the material determines which vertex attributes are present. The material also determines whether the surface is using lightmaps; if it is, then the first UV coordinate will be read out of the short UV array instead of the float one.


There is no primitive count value; you'll need to continue reading data until you hit the end of the display list. There are a couple values you can use for reference; either the surface's section size, the display list size, or the surface's end offset.  
There is no primitive count value; you'll need to continue reading data until you hit the end of the display list. There are a couple values you can use for reference; either the surface's section size, or the surface's end offset. '''Do not use the display list size setting from the surface header, though'''; it's usually accurate, but on some models it will give you a size smaller than the table actually is, and you'll miss a bunch of data. See Metroid3/4a11192a.CMDL from Prime 1 (icicle Ridley) or Metroid1/05778239.CMDL from Echoes (Samus's gunship) for an example of this.


There are 7 primitive types supported by GX, indicated in the upper 5 bits of the flag value. Note that the game only ever actually uses triangles, triangle strips, and triangle fans; however, all of these primitives are supported by GX and are therefore supported by the game, and so they could be used in custom model files.
There are 7 primitive types supported by GX, indicated in the upper 5 bits of the flag value. Note that the game only ever actually uses triangles, triangle strips, and triangle fans; however, all of these primitives are supported by GX and are therefore supported by the game, and so they could be used in custom model files.