public override int loadbody(BinaryReader br) { var name = br.ReadPackString(); int meshCount = br.ReadInt32(); int size = name.Length + 9; MeshNames = new List<string>(size); for (int i = 0; i < meshCount; i++) { var meshName = br.ReadPackString(); MeshNames.Add(meshName); size += meshName.Length + 4; } return size; }
public void LoadBody(byte[] array) { BinaryReader br = new BinaryReader(new MemoryStream(array)); // matname = br.ReadPackString(); int lodcount = br.ReadInt32(); LODs = new List<Model>(); for (int i = 0; i < lodcount; i++) { SubSet[] LodSubset = new SubSet[br.ReadInt32()]; for (int j = 0; j < LodSubset.Length; j++) { string[] names = new string[br.ReadInt32()]; for (int n = 0; n < names.Length; n++) names[n] = br.ReadPackString(); LodSubset[j] = new SubSet(names); } LODs.Add(new Model(LodSubset)); } IsShadowCaster = br.ReadBoolean(); IsShadowReceiver = br.ReadBoolean(); NeedRotate = br.ReadBoolean(); isTransparent = br.ReadBoolean(); isSelfIllumination = br.ReadBoolean(); }
public static Skeleton FromStream(BinaryReader stream) { var bones = new Bone[stream.ReadInt32()]; var parentNames = new string[bones.Length]; Bone root = null; for (int i = 0; i < bones.Length; i++) { bones[i] = new Bone(); bones[i].index = i; bones[i].Name = stream.ReadPackString(); parentNames[i] = stream.ReadPackString(); if (parentNames[i] == "-\0") root = bones[i]; } if (root == null) throw new Exception("Root bone can not be null"); var skeleton = new Skeleton(); skeleton.Init(root, bones); for (int i = 0; i < bones.Length; i++) { bones[i].BaseMatrix = stream.ReadMatrix(); if (bones[i] != root) bones[i].Parent = bones[skeleton.IndexOf(parentNames[i])]; } foreach (Bone b in bones) { List<Bone> chl = new List<Bone>(); for (int i = 0; i < bones.Length; i++) if (bones[i].Parent == b) chl.Add(bones[i]); b.Childrens = chl.ToArray(); } return skeleton; }
public override void loadbody(byte[] buffer) { // vertexdeclaration = new VertexPositionNormalTexture(); BinaryReader br = new BinaryReader(new MemoryStream(buffer)); vertices = new SkinnedVertex[br.ReadInt32()]; indices = new int[br.ReadInt32()]; for (int bv = 0; bv < vertices.Length; bv++) { Vector3 pos = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); Vector3 nor = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); Vector2 tcr = new Vector2(br.ReadSingle(), br.ReadSingle()); Vector3 bindx = new Vector3(); Vector3 bwigs = new Vector3(); int relationBoneCount = br.ReadInt32(); if (relationBoneCount > 3) throw new Exception("Too many bones in skin!!!"); var boneIndices = new int[] { 0, 0, 0 }; for (var j = 0; j < relationBoneCount; j++) { string name = br.ReadPackString(); boneIndices[j] = skeleton.IndexOf(name); } bindx.X = boneIndices[0]; bindx.Y = boneIndices[1]; bindx.Z = boneIndices[2]; relationBoneCount = br.ReadInt32(); float[] boneWeight = new float[] { 0.0f, 0.0f, 0.0f }; for (var j = 0; j < relationBoneCount; j++) boneWeight[j] = br.ReadSingle(); bwigs.X = boneWeight[0]; bwigs.Y = boneWeight[1]; bwigs.Z = boneWeight[2]; vertices[bv] = new SkinnedVertex( pos, nor, tcr, bindx, bwigs); } for (int bv = 0; bv < indices.Length; bv++) indices[bv] = br.ReadInt32(); br.Close(); }
public void LoadBody(byte[] array) { BinaryReader br = new BinaryReader(new MemoryStream(array)); matname = br.ReadPackString(); RODName = br.ReadPackString(); IsRCCMEnabled = br.ReadBoolean(); if (IsRCCMEnabled) RCCMName = br.ReadPackString(); else { RCShapeType = br.ReadInt32(); RCShapeSize = br.ReadVector3(); } IsAnimated = br.ReadBoolean(); if (IsAnimated) { CharacterName = br.ReadPackString(); IsRCCMAnimated = br.ReadBoolean(); } BehaviourType = br.ReadInt32(); switch (BehaviourType) { case objectmovingbehaviourmodel: { } break; case objectphysicbehaviourmodel: { ShapeType = br.ReadInt32(); if (ShapeType == 0) { PhysXShapeType = br.ReadInt32(); ShapeSize = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); //read shape type, size of shape, rotation axis and angle } if (ShapeType == 1) { PhysicCollisionName = br.ReadPackString(); } IsStatic = br.ReadBoolean(); if (!IsStatic) { Mass = br.ReadSingle(); CenterOfMass.X = br.ReadSingle(); CenterOfMass.Y = br.ReadSingle(); CenterOfMass.Z = br.ReadSingle(); } } break; case objectphysiccharcontrollerbehaviourmodel: { ShapeType = br.ReadInt32(); if (ShapeType == 0) { PhysXShapeType = br.ReadInt32(); ; ShapeSize = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); } if (ShapeType == 1) { PhysicCollisionName = br.ReadPackString(); } Mass = br.ReadSingle(); CenterOfMass.X = br.ReadSingle(); CenterOfMass.Y = br.ReadSingle(); CenterOfMass.Z = br.ReadSingle(); } break; case objectstaticbehaviourmodel: { } break; default: break; } br.Close(); }
public override int loadbody(BinaryReader br) { long pos = br.BaseStream.Position; int count = br.ReadInt32(); lodMats = new List<Lod>();// Lod[count]; for (int i = 0; i < count; i++) { Lod l = new Lod(); lodMats.Add(l); int matc = br.ReadInt32(); lodMats[i].mats = new List<SubsetMaterial>();// SubsetMaterial[br.ReadInt32()]; for (int j = 0; j < matc; j++) { SubsetMaterial sm = new SubsetMaterial(); sm.DiffuseTextureName = br.ReadPackString(); lodMats[i].mats.Add(sm); } } return Convert.ToInt32(br.BaseStream.Position - pos); }
public void loadbody(byte[] buffer) { TerrainVertex[] vertices; ushort[] indices; BinaryReader br = new BinaryReader(new MemoryStream(buffer)); vertices = new TerrainVertex[br.ReadInt32()]; indices = new ushort[br.ReadInt32()]; for (int bv = 0; bv < vertices.Length; bv++) { vertices[bv] = new TerrainVertex( new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()), new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()), new Vector2(br.ReadSingle(), 1.0f -br.ReadSingle())); string sss; int t = br.ReadInt32(); for (int i = 0; i < t; i++) sss = br.ReadPackString(); int d = br.ReadInt32(); br.BaseStream.Seek(d * 4, SeekOrigin.Current); } for (int bv = 0; bv < indices.Length; bv++) indices[bv] = Convert.ToUInt16(br.ReadInt32()); br.Close(); vertexBuffer = new VertexBuffer(GameEngine.Device, typeof(TerrainVertex), vertices.Length, BufferUsage.None); vertexBuffer.SetData<TerrainVertex>(vertices); indexBuffer = new IndexBuffer(GameEngine.Device, IndexElementSize.SixteenBits, indices.Length, BufferUsage.None); indexBuffer.SetData<ushort>(indices); }
public override void loadbody(byte[] array) { data = array; var self = new BinaryReader(new MemoryStream(array)); var bones = new Bone[self.ReadInt32()]; var parentNames = new string[bones.Length]; Bone root = null; for (int i = 0; i < bones.Length; i++) { bones[i] = new Bone(); bones[i].Name = self.ReadPackString(); parentNames[i] = self.ReadPackString(); if (parentNames[i] == "-\0") { root = bones[i]; } } if (root == null) { throw new Exception("Root bone can not be null"); } Root = root; this.bones = bones; map = new BoneMap(bones.Length); for (int i = 0; i < bones.Length; i++) map.Add(bones[i].Name, i); for (int i = 0; i < bones.Length; i++) { bones[i].BaseInverseMatrix = self.ReadMatrix(); if (bones[i] != root) bones[i].Parent = bones[IndexOf(parentNames[i])]; } HeadIndex = self.ReadInt32(); WeaponIndex = self.ReadInt32(); HeadMatrix = self.ReadMatrix(); WeaponMatrix = self.ReadMatrix(); RootIndex = self.ReadInt32(); TopRootIndex = self.ReadInt32(); BottomRootIndex = self.ReadInt32(); botomindexes = new int[self.ReadInt32()]; for (int i = 0; i < botomindexes.Length; i++) botomindexes[i] = self.ReadInt32(); topindexes = new int[self.ReadInt32()]; for (int i = 0; i < topindexes.Length; i++) topindexes[i] = self.ReadInt32(); }