Ejemplo n.º 1
0
		Model* ModelReader::Read(ContentReader * const reader, Model* existingInstance)
		{
			Model* model = NULL;

			if (existingInstance == NULL)
			{
				
			}
			else
			{
				model = existingInstance;

				// TODO: clean up the old model data
			}

			uint boneCount = reader->ReadUInt32();

			for (uint i = 0; i < boneCount; i++)
			{
				ModelBone bone;

				bone.Transform = reader->ReadMatrix();

				model->bones.Add(bone);
			}

			for (uint i = 0; i < boneCount; i++)
			{
				ReadBoneReference(reader, boneCount);

				// Read the child bone references.
				uint childCount = reader->ReadUInt32();

				if (childCount)
				{
					for (uint j = 0; j < childCount; j++)
					{
						ReadBoneReference(reader, boneCount);
					}
				}
			}

			// Read the mesh data.
			uint meshCount = reader->ReadUInt32();

			for (uint i = 0; i < meshCount; i++)
			{

			}
		}
Ejemplo n.º 2
0
void ModelReader::Read(ContentReader* reader)
{
    // Read the bone names and transforms.
    uint32_t boneCount = reader->ReadUInt32();
    reader->Log.WriteLine("Bone count: %u", boneCount);

    for (uint32_t i = 0; i < boneCount; i++)
    {
        reader->Log.WriteLine("Bone %u:", i);
        reader->Log.Indent();

        reader->Log.WriteLine("Name:");
        reader->ReadObject();

        reader->Log.WriteLine("Transform:");
        reader->Log.Indent();
        MatrixReader().Read(reader);
        reader->Log.Unindent();

        reader->Log.Unindent();
    }

    // Read the bone hierarchy.
    for (uint32_t i = 0; i < boneCount; i++)
    {
        reader->Log.WriteLine("Bone %u hierarchy:", i);
        reader->Log.Indent();

        // Read the parent bone reference.
        reader->Log.Write("Parent: ");
        ReadBoneReference(reader, boneCount);

        // Read the child bone references.
        uint32_t childCount = reader->ReadUInt32();

        if (childCount)
        {
            reader->Log.WriteLine("Children:");
            reader->Log.Indent();

            for (uint32_t j = 0; j < childCount; j++)
            {
                ReadBoneReference(reader, boneCount);
            }

            reader->Log.Unindent();
        }

        reader->Log.Unindent();
    }

    // Read the mesh data.
    uint32_t meshCount = reader->ReadUInt32();
    reader->Log.WriteLine("Mesh count: %u", meshCount);

    for (uint32_t i = 0; i < meshCount; i++)
    {
        reader->Log.WriteLine("Mesh %u", i);
        reader->Log.Indent();

        reader->Log.WriteLine("Mesh name:");
        reader->ReadObject();

        reader->Log.Write("Mesh parent: ");
        ReadBoneReference(reader, boneCount);

        reader->Log.WriteLine("Mesh bounds:");
        reader->Log.Indent();
        BoundingSphereReader().Read(reader);
        reader->Log.Unindent();

        reader->Log.WriteLine("Mesh tag:");
        reader->ReadObject();

        // Read the mesh part data.
        uint32_t partCount = reader->ReadUInt32();
        reader->Log.WriteLine("Mesh part count: %u", partCount);

        for (uint32_t j = 0; j < partCount; j++)
        {
            reader->Log.WriteLine("Mesh part %u", j);
            reader->Log.Indent();

            reader->Log.WriteLine("Vertex offset: %d", reader->ReadInt32());
            reader->Log.WriteLine("Num vertices: %d", reader->ReadInt32());
            reader->Log.WriteLine("Start index: %d", reader->ReadInt32());
            reader->Log.WriteLine("Primitive count: %d", reader->ReadInt32());

            reader->Log.WriteLine("Mesh part tag:");
            reader->ReadObject();

            reader->Log.Write("Vertex buffer: ");
            reader->ReadSharedResource();

            reader->Log.Write("Index buffer: ");
            reader->ReadSharedResource();

            reader->Log.Write("Effect: ");
            reader->ReadSharedResource();
            
            reader->Log.Unindent();
        }

        reader->Log.Unindent();
    }

    // Read the final pieces of model data.
    reader->Log.Write("Model root: ");
    ReadBoneReference(reader, boneCount);

    reader->Log.WriteLine("Model tag:");
    reader->ReadObject();
}