public static VTXModelLOD ReadModelLOD(BinaryReader br, int offset, Model currentModel, int lodNum) { br.BaseStream.Seek(offset, SeekOrigin.Begin); VTXModelLOD mlod = new VTXModelLOD(); mlod.num_meshes = br.ReadInt32(); mlod.mesh_offset = br.ReadInt32(); mlod.switch_point = br.ReadSingle(); int vertexOffset = currentModel.VertexBaseNum; mlod.Meshes = new VTXMesh[mlod.num_meshes]; for (int i = 0; i < mlod.num_meshes; i++) { MDLMesh currentMesh = currentModel.Meshes[i]; mlod.Meshes[i] = ReadMesh(br, offset + mlod.mesh_offset + (i * VTXMesh.VTX_MESH_SIZE), lodNum, vertexOffset, currentMesh); } return mlod; }
private static Model ReadModel(BinaryReader br, int offset) { br.BaseStream.Seek(offset, SeekOrigin.Begin); MDLModel mdl = new MDLModel(); string model_name = ASCIIEncoding.ASCII.GetString(br.ReadBytes(64)); int nullindex = model_name.IndexOf('\0'); if (nullindex != -1) model_name = model_name.Substring(0, nullindex); mdl.model_name = model_name; mdl.model_type = br.ReadInt32(); mdl.bounding_radius = br.ReadSingle(); mdl.num_meshes= br.ReadInt32(); mdl.mesh_offset= br.ReadInt32(); mdl.num_vertices= br.ReadInt32(); mdl.vertex_index= br.ReadInt32(); mdl.tangents_index= br.ReadInt32(); mdl.num_attachments= br.ReadInt32(); mdl.attachment_offset= br.ReadInt32(); mdl.num_eyeballs= br.ReadInt32(); mdl.eyeball_offset= br.ReadInt32(); mdl.vertex_data = new MDLModelVertexData(); mdl.vertex_data.vertex_data_ptr = br.ReadInt32(); mdl.vertex_data.tangent_data_ptr = br.ReadInt32(); mdl.unused_array = new int[8]; // 8 for (int i = 0; i < 8; i++) { mdl.unused_array[i] = br.ReadInt32(); } Model model = new Model(mdl); if (mdl.num_meshes >1) { int test = 2; } for (int i = 0; i < mdl.num_meshes; i++) { MDLMesh mesh = ReadMesh(br, offset + mdl.mesh_offset + (i * 116)); // 88 bytes for MDLMesh model.Meshes.Add(mesh); } if (mdl.num_meshes > 1) { int test = 2; } return model; }
public static VTXModel ReadModel(BinaryReader br, int offset, Model currentModel) { br.BaseStream.Seek(offset, SeekOrigin.Begin); VTXModel model = new VTXModel(); model.num_lods = br.ReadInt32(); model.lod_offset = br.ReadInt32(); // Check for multiple LOD-levels if (model.num_lods >= 1) { // TODO } float distance = 0f; float lastDistance = 0f; // Process LODS model.Lods = new VTXModelLOD[model.num_lods]; for (int i = 0; i < model.num_lods; i++) { model.Lods[i] = ReadModelLOD(br, offset + model.lod_offset + (i * 12), currentModel, i); // 12 bytes for VYXModelLOD } return model; }