Esempio n. 1
0
        public static ModelData ReadModelData(Stream stream)
        {
            EngineBinaryReader engineBinaryReader = new EngineBinaryReader(stream);
            ModelData          modelData          = new ModelData();

            modelData.Bones.Capacity = engineBinaryReader.ReadInt32();
            for (int i = 0; i < modelData.Bones.Capacity; i++)
            {
                ModelBoneData modelBoneData = new ModelBoneData();
                modelData.Bones.Add(modelBoneData);
                modelBoneData.ParentBoneIndex = engineBinaryReader.ReadInt32();
                modelBoneData.Name            = engineBinaryReader.ReadString();
                modelBoneData.Transform       = engineBinaryReader.ReadMatrix();
            }
            modelData.Meshes.Capacity = engineBinaryReader.ReadInt32();
            for (int j = 0; j < modelData.Meshes.Capacity; j++)
            {
                ModelMeshData modelMeshData = new ModelMeshData();
                modelData.Meshes.Add(modelMeshData);
                modelMeshData.ParentBoneIndex    = engineBinaryReader.ReadInt32();
                modelMeshData.Name               = engineBinaryReader.ReadString();
                modelMeshData.MeshParts.Capacity = engineBinaryReader.ReadInt32();
                modelMeshData.BoundingBox        = engineBinaryReader.ReadBoundingBox();
                for (int k = 0; k < modelMeshData.MeshParts.Capacity; k++)
                {
                    ModelMeshPartData modelMeshPartData = new ModelMeshPartData();
                    modelMeshData.MeshParts.Add(modelMeshPartData);
                    modelMeshPartData.BuffersDataIndex = engineBinaryReader.ReadInt32();
                    modelMeshPartData.StartIndex       = engineBinaryReader.ReadInt32();
                    modelMeshPartData.IndicesCount     = engineBinaryReader.ReadInt32();
                    modelMeshPartData.BoundingBox      = engineBinaryReader.ReadBoundingBox();
                }
            }
            modelData.Buffers.Capacity = engineBinaryReader.ReadInt32();
            for (int l = 0; l < modelData.Buffers.Capacity; l++)
            {
                ModelBuffersData modelBuffersData = new ModelBuffersData();
                modelData.Buffers.Add(modelBuffersData);
                VertexElement[] array = new VertexElement[engineBinaryReader.ReadInt32()];
                for (int m = 0; m < array.Length; m++)
                {
                    array[m] = new VertexElement(engineBinaryReader.ReadInt32(), (VertexElementFormat)engineBinaryReader.ReadInt32(), engineBinaryReader.ReadString());
                }
                modelBuffersData.VertexDeclaration = new VertexDeclaration(array);
                modelBuffersData.Vertices          = engineBinaryReader.ReadBytes(engineBinaryReader.ReadInt32());
                modelBuffersData.Indices           = engineBinaryReader.ReadBytes(engineBinaryReader.ReadInt32());
            }
            return(modelData);
        }
Esempio n. 2
0
 internal void Initialize(ModelData modelData, bool keepSourceVertexDataInTags)
 {
     if (modelData == null)
     {
         throw new ArgumentNullException("modelData");
     }
     InternalDispose();
     VertexBuffer[] array  = new VertexBuffer[modelData.Buffers.Count];
     IndexBuffer[]  array2 = new IndexBuffer[modelData.Buffers.Count];
     for (int i = 0; i < modelData.Buffers.Count; i++)
     {
         ModelBuffersData modelBuffersData = modelData.Buffers[i];
         array[i] = new VertexBuffer(modelBuffersData.VertexDeclaration, modelBuffersData.Vertices.Length / modelBuffersData.VertexDeclaration.VertexStride);
         array[i].SetData(modelBuffersData.Vertices, 0, modelBuffersData.Vertices.Length);
         array2[i] = new IndexBuffer(IndexFormat.SixteenBits, modelBuffersData.Indices.Length / 2);
         array2[i].SetData(modelBuffersData.Indices, 0, modelBuffersData.Indices.Length);
         if (keepSourceVertexDataInTags)
         {
             array[i].Tag  = modelBuffersData.Vertices;
             array2[i].Tag = modelBuffersData.Indices;
         }
     }
     foreach (ModelBoneData bone in modelData.Bones)
     {
         NewBone(bone.Name, bone.Transform, (bone.ParentBoneIndex >= 0) ? m_bones[bone.ParentBoneIndex] : null);
     }
     foreach (ModelMeshData mesh in modelData.Meshes)
     {
         ModelMesh modelMesh = NewMesh(mesh.Name, m_bones[mesh.ParentBoneIndex], mesh.BoundingBox);
         m_meshes.Add(modelMesh);
         foreach (ModelMeshPartData meshPart in mesh.MeshParts)
         {
             modelMesh.NewMeshPart(array[meshPart.BuffersDataIndex], array2[meshPart.BuffersDataIndex], meshPart.StartIndex, meshPart.IndicesCount, meshPart.BoundingBox);
         }
     }
 }