Пример #1
0
            public PmdData(BinaryReader reader)
            {
                header = new PmdHeader(reader);
                if (header.Magic != "Pmd")
                {
                    throw new Exception("The file is not a valid PMD file.");
                }

                vertexList   = new PmdVertexList(reader);
                polyList     = new PmdPolyList(reader);
                materialList = new PmdMaterialList(reader);
                boneList     = new PmdBoneList(reader);

                ikList        = new PmdIKList(reader);
                skinList      = new PmdSkinList(reader);
                skinIndexList = new PmdSkinIndexList(reader);
                dispNameList  = new PmdDispNameList(reader);
                boneIndexList = new PmdBoneIndexList(reader);
            }
Пример #2
0
 public PmdLoader(string Path)
 {
     using (var fs = new FileStream(Path, FileMode.Open)) {
         bs     = new BinaryStream(fs);
         Header = new PmdHeader(bs);
         Vertex = new PmdVertex[bs.ReadInt32()];
         for (int i = 0; i < Vertex.Length; i++)
         {
             Vertex[i] = new PmdVertex(bs);
         }
         Index = new PmdIndex[bs.ReadInt32() / 3];
         for (int i = 0; i < Index.Length; i++)
         {
             Index[i] = new PmdIndex(bs);
         }
         Material = new PmdMaterial[bs.ReadInt32()];
         for (int i = 0; i < Material.Length; i++)
         {
             Material[i] = new PmdMaterial(bs);
         }
         Bone = new PmdBone[bs.ReadInt16()];
         for (int i = 0; i < Bone.Length; i++)
         {
             Bone[i] = new PmdBone(bs);
         }
         Ik = new PmdIk[bs.ReadInt16()];
         for (int i = 0; i < Ik.Length; i++)
         {
             Ik[i] = new PmdIk(bs);
         }
         Skin = new PmdSkin[bs.ReadInt16()];
         for (int i = 0; i < Skin.Length; i++)
         {
             Skin[i] = new PmdSkin(bs);
         }
         bs.SkipShort(bs.ReadByte());
         byte BoneDispCount = bs.ReadByte();
         bs.Sjis(50 * BoneDispCount);
         int bondis = bs.ReadInt32();
         for (int i = 0; i < bondis; i++)
         {
             bs.ReadInt16(); bs.ReadByte();
         }
         if (bs.ReadByte() == (byte)1)
         {
             bs.Sjis(20); bs.Sjis(256);
             bs.Sjis(20 * Bone.Length);
             bs.Sjis(20 * (Skin.Length - 1));
             bs.Sjis(50 * BoneDispCount);
         }
         Toon = new PmdToon[10];
         for (int i = 0; i < 10; i++)
         {
             Toon[i] = new PmdToon(bs);
         }
         Rigid = new PmdRigid[bs.ReadInt32()];
         for (int i = 0; i < Rigid.Length; i++)
         {
             Rigid[i] = new PmdRigid(bs);
         }
         Joint = new PmdJoint[bs.ReadInt32()];
         for (int i = 0; i < Joint.Length; i++)
         {
             Joint[i] = new PmdJoint(bs);
         }
     }
 }