예제 #1
0
        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);
        }
예제 #2
0
        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);
        }