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++) { } }
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(); }