This PR fixes reader issues with MOD (Croc) model files. All supplied MOD files used for testing now read without error. RGB color is now used when the texture face flag is unset, and collision data is skipped if the flag for that data section is present. Additionally, zero countVerts is now allowed (while continuing to read the rest of the sub-model, so that we're on the correct reader offset for the next sub-model).
Stopped using BRenderHelper to read uint16s and uint32s, because reading BE was actually reading as little endian, so BinaryReader can just be used as-is. BRenderHelper is now unused.
Fixed BRenderHelper's swapped BE and LE function names.
Added MOD constants to Program to replace using constants in the reader. Also fixed MaxMODModels and MaxMODVertices being swapped.
Normals list is now used unless any of the normals have a length of zero.
Put more research into understanding of the remaining unknown values. Some of it is thanks to @vs49688 :)
Discovered that the first 3 int16s of a face are a unit vector, but how it's used is unknown. My guess is it might be an alternative to using the normals provided by vertex indices.
Discovered the uint16 after the unit vector describes a count for a following number of faces (when non-zero).
Added GeomUtils.IsZero(this Vector3) for quickly checking for zero-length vectors.
This PR fixes reader issues with MOD (Croc) model files. All supplied MOD files used for testing now read without error. RGB color is now used when the texture face flag is unset, and collision data is skipped if the flag for that data section is present. Additionally, zero countVerts is now allowed (while continuing to read the rest of the sub-model, so that we're on the correct reader offset for the next sub-model).
GeomUtils.IsZero(this Vector3)
for quickly checking for zero-length vectors.