Example #1
0
        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;
        }
Example #2
0
        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;
        }
Example #3
0
        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;
        }