public FMDL(FileData f) { ImageKey = "model"; SelectedImageKey = "model"; f.skip(4); // MAGIC f.skip(8); // Header Length f.skip(4); // padding Text = f.readString(f.readOffset() + 2, -1); f.skip(4); // padding int EndOfStringTable = f.readOffset(); f.skip(4); // padding int FSKLOffset = f.readOffset(); f.skip(4); // padding int FVTXOffset = f.readOffset(); f.skip(4); // padding int FSHPOffset = f.readOffset(); f.skip(4); // padding int FSHPDict = f.readOffset(); f.skip(4); // padding int FMATOffset = f.readOffset(); f.skip(4); // padding int FMATDict = f.readOffset(); f.skip(4); // padding int UserDataOffset = f.readOffset(); f.skip(20); // padding int FVTXCount = f.readShort(); int FSHPCount = f.readShort(); int FMATCount = f.readShort(); int UserData = f.readShort(); int TotalAmountOfVerticies = f.readShort(); f.skip(4); // padding // FSKL for skeleton f.seek(FSKLOffset); skel = new FSKL(); skel.Read(f); Nodes.Add(skel); // FMAT is obs materials for (int i = 0; i < FMATCount; i++) { f.seek(FMATOffset + (i * 184)); mats.Add(new FMAT(f)); } // FVTX is the vertex buffer object attributes for (int i = 0; i < FVTXCount; i++) { f.seek(FVTXOffset + (i * 96)); vertattr.Add(new FVTX(f)); } // FSHP is the mesh objects for (int i = 0; i < FSHPCount; i++) { f.seek(FSHPOffset + (i * 112)); shapes.Add(new FSHP(f)); } Nodes.AddRange(shapes.ToArray()); Nodes.AddRange(vertattr.ToArray()); Nodes.AddRange(mats.ToArray()); GL.GenBuffers(1, out ibo); }
public FMDL(FileData f) { ImageKey = "model"; SelectedImageKey = "model"; f.skip(4); // MAGIC int fnameOffset = f.readOffset(); Text = f.readString(fnameOffset, -1); f.skip(4); // pointer to end of string table? int FSKLOffset = f.readOffset(); int FVTXOffset = f.readOffset(); int FSHPOffset = f.readOffset(); int FMATOffset = f.readOffset(); int PARAMOffset = f.readOffset(); int FVTXCount = f.readShort(); int FSHPCount = f.readShort(); int FMATCount = f.readShort(); int PARAMCount = f.readShort(); f.skip(4); // unknown possible facecount or something? // firstly Imma do the skeleton f.seek(FSKLOffset); skel = new FSKL(); skel.Read(f); Nodes.Add(skel); // FMAT is obs materials f.seek(FMATOffset); IndexGroup fmatGroup = new IndexGroup(f); for (int i = 0; i < FMATCount; i++) { f.seek(fmatGroup.dataOffsets[i]); mats.Add(new FMAT(f)); } // FVTX is the vertex buffer object attributes f.seek(FVTXOffset); for (int i = 0; i < FVTXCount; i++) { vertattr.Add(new FVTX(f)); } // FSHP is the mesh objects f.seek(FSHPOffset); IndexGroup fmdlGroup = new IndexGroup(f); for (int i = 0; i < FSHPCount; i++) { f.seek(fmdlGroup.dataOffsets[i]); shapes.Add(new FSHP(f)); } Nodes.AddRange(shapes.ToArray()); Nodes.AddRange(vertattr.ToArray()); Nodes.AddRange(mats.ToArray()); GL.GenBuffers(1, out ibo); }