public Mdl(mdl_t mdlTStruct, texgroup_struct[] tgs, stvert_t[] vertData, dtriangle_t[] triData, frame_struct[] frame ) { this.header = mdlTStruct; this.texGroup = tgs; this.vertex = vertData; this.triangle = triData; this.frame = frame; }
private frame_struct[] readFrameData(mdl_t mdlTStruct, System.IO.FileStream fstream) { daliasframetype_t frametype; frame_struct[] frame = new frame_struct[mdlTStruct.numframes]; for(int frame_num = 0; frame_num < mdlTStruct.numframes; frame_num++){ frametype.type = (aliasframetype_t) readInt(fstream); frame[frame_num].type = frametype.type; Console.WriteLine("Frame type for frame #{0} is {1}", frame_num, frametype.type); if(frametype.type == aliasframetype_t.ALIAS_SINGLE){ //no group data for single-frame meshes //we want to use the same data structure, though so set numposes frame[frame_num].numposes = 1; //no interval data for single-frame meshes - set to zero frame[frame_num].interval = new float[1]; frame[frame_num].interval[0] = 0.0f; }else{ //read group data for multi-frame meshes daliasgroup_t groupData = readDAliasGroup(fstream); frame[frame_num].numposes = groupData.numposes; frame[frame_num].interval = new float[groupData.numposes]; for(int i = 0; i < groupData.numposes; i++){ frame[frame_num].interval[i] = readSingle(fstream); } } // Read pose data frame[frame_num].pose = new pose_struct[frame[frame_num].numposes]; for(int i = 0; i < frame[frame_num].numposes; i++){ daliasframe_t dAliasFrame = readDAliasFrame(fstream); frame[frame_num].pose[i].name = dAliasFrame.name; Console.WriteLine("Reading pose named {0}", frame[frame_num].pose[i].name); frame[frame_num].pose[i].vertex = new trivertx_t[mdlTStruct.numverts]; for(int j = 0; j < mdlTStruct.numverts; j++){ frame[frame_num].pose[i].vertex[j] = readTriVertX(fstream); } } } return frame; }
private stvert_t[] readVertData(mdl_t mdlTStruct, System.IO.FileStream fstream) { stvert_t[] vertData = new stvert_t[mdlTStruct.numverts]; for(int vert_num = 0; vert_num < mdlTStruct.numverts; vert_num++) { vertData[vert_num].onseam = readInt(fstream); vertData[vert_num].s = readInt(fstream); vertData[vert_num].t = readInt(fstream); } return vertData; }
private dtriangle_t[] readTriangleData(mdl_t mdlTStruct, System.IO.FileStream fstream) { dtriangle_t[] triData = new dtriangle_t[mdlTStruct.numtris]; for(int tri_num = 0; tri_num < mdlTStruct.numtris; tri_num++){ triData[tri_num].vertindex = new int[3]; triData[tri_num].facesfront = readInt(fstream); for(int i = 0; i < 3; i++){ triData[tri_num].vertindex[i] = readInt(fstream); } } return triData; }
private texgroup_struct[] readTexGroupStructs(mdl_t mdlTStruct, System.IO.FileStream fstream) { texgroup_struct[] tgs = new texgroup_struct[ mdlTStruct.num_texgroups ]; for(int texgroup_num = 0; texgroup_num < mdlTStruct.num_texgroups; texgroup_num++){ tgs[texgroup_num].type = (aliasskintype_t) readInt(fstream); Console.WriteLine("Type for tgs[{0}] is {1}", texgroup_num, tgs[texgroup_num].type); if(tgs[texgroup_num].type == aliasskintype_t.ALIAS_SKIN_SINGLE){ //if type is ALIAS_SKIN_SINGLE, set number of textures to 1 tgs[texgroup_num].numtextures = 1; //and interval[0] to 0 tgs[texgroup_num].interval = new float[1]; tgs[texgroup_num].interval[0] = 0.0f; }else{ // Determine how many textures there are in this group tgs[texgroup_num].numtextures = readInt(fstream); Console.WriteLine("numtextures for tgs[{0}] is {1}", texgroup_num, tgs[texgroup_num].numtextures); tgs[texgroup_num].interval = new float[tgs[texgroup_num].numtextures]; // Read the intervals between each texture for(int i = 0; i < tgs[texgroup_num].numtextures; i++){ tgs[texgroup_num].interval[i] = readSingle(fstream); } } // Read texture data tgs[texgroup_num].texture = new tex_struct[tgs[texgroup_num].numtextures]; for(int tex_num = 0; tex_num < tgs[texgroup_num].numtextures; tex_num++){ tgs[texgroup_num].texture[tex_num].pixel = new byte[mdlTStruct.texheight * mdlTStruct.texwidth]; fstream.Read(tgs[texgroup_num].texture[tex_num].pixel, 0, mdlTStruct.texheight * mdlTStruct.texwidth); } } return tgs; }
private mdl_t readMdlT(System.IO.FileStream fstream) { mdl_t mdlTStruct = new mdl_t(); mdlTStruct.ident = readInt(fstream); Console.WriteLine("Ident is {0}", mdlTStruct.ident); mdlTStruct.version = readInt(fstream); Console.WriteLine("Version is {0}", mdlTStruct.version); mdlTStruct.scale = new float[3]; for(int i = 0; i <= 2; i++){ mdlTStruct.scale[i] = readSingle(fstream); Console.WriteLine("Scale[{0}]: {1}", i, mdlTStruct.scale[i]); } mdlTStruct.scale_origin = new float[3]; for(int i = 0; i <= 2; i++){ mdlTStruct.scale_origin[i] = readSingle(fstream); Console.WriteLine("scale_origin[{0}]: {1}", i, mdlTStruct.scale_origin[i]); } mdlTStruct.boundingradius = readSingle(fstream); Console.WriteLine("bounding radius is {0}", mdlTStruct.boundingradius); mdlTStruct.eyeposition = new float[3]; for(int i = 0; i <= 2; i++){ mdlTStruct.eyeposition[i] = readSingle(fstream); Console.WriteLine("eyeposition[{0}]: {1}", i, mdlTStruct.eyeposition[i]); } mdlTStruct.num_texgroups = readInt(fstream); Console.WriteLine("Number of texgroups: {0}", mdlTStruct.num_texgroups); mdlTStruct.texwidth = readInt(fstream); Console.WriteLine("texture width: {0}", mdlTStruct.texwidth); mdlTStruct.texheight = readInt(fstream); Console.WriteLine("texture height: {0}", mdlTStruct.texheight); mdlTStruct.numverts = readInt(fstream); Console.WriteLine("numverts: {0}", mdlTStruct.numverts); mdlTStruct.numtris = readInt(fstream); Console.WriteLine("numtris: {0}", mdlTStruct.numtris); mdlTStruct.numframes = readInt(fstream); Console.WriteLine("numframes: {0}", mdlTStruct.numframes); mdlTStruct.synctype = (synctype_t) readInt(fstream); Console.WriteLine("synctype: {0}", mdlTStruct.synctype); mdlTStruct.flags = readInt(fstream); Console.WriteLine("flags: {0}", mdlTStruct.flags); mdlTStruct.size = readSingle(fstream); Console.WriteLine("size: {0}", mdlTStruct.size); return mdlTStruct; }