static void ExportRoutine(string sourceFile,string targetFile) { //Load src file DMC4Model mdl = new DMC4Model(); mdl.LoadModel(sourceFile); //Convert WavefrontModel convertedMdl = WavefrontModel.FromDMC4Model(mdl); convertedMdl.SaveModel(targetFile); }
public static WavefrontModel FromDMC4Model(DMC4Model model) { WavefrontModel convertedModel = new WavefrontModel(); float3[] vertices = new float3[model.Vertices.Length]; float3[] normals = new float3[model.Vertices.Length]; float3[] texcoords = new float3[model.Vertices.Length]; for (int i = 0; i < model.Vertices.Length; i++) { vertices[i] = new float3((float)model.Vertices[i].Position.X / (float)model.Vertices[i].Position.W, (float)model.Vertices[i].Position.Y / (float)model.Vertices[i].Position.W, (float)model.Vertices[i].Position.Z / (float)model.Vertices[i].Position.W); normals[i] = new float3((float)model.Vertices[i].Normals.X / (float)model.Vertices[i].Normals.W, (float)model.Vertices[i].Normals.Y / (float)model.Vertices[i].Normals.W, (float)model.Vertices[i].Normals.Z / (float)model.Vertices[i].Normals.W); texcoords[i] = new float3((float)model.Vertices[i].TEXCOORD0.X / (float)short.MaxValue, (float)model.Vertices[i].TEXCOORD0.Y / (float)short.MaxValue, 0.0f); } short[] tris = new short[model.Triangles.Length]; for (int i = 0; i < model.Triangles.Length; i++) { tris[i] = (short)(model.Triangles[i] + 1);//Triangle indexing in Wavefront starts from 1 } //Remap vertices (denormalization) foreach (var vertex in vertices) { vertex.X = vertex.X * (model.MaxBoundingbox.X - model.MinBoundingbox.X) + model.MinBoundingbox.X; vertex.Y = vertex.Y * (model.MaxBoundingbox.Y - model.MinBoundingbox.Y) + model.MinBoundingbox.Y; vertex.Z = vertex.Z * (model.MaxBoundingbox.Z - model.MinBoundingbox.Z) + model.MinBoundingbox.Z; } convertedModel.Vertices = vertices; convertedModel.Normals = normals; convertedModel.TextureCoordinates = texcoords; convertedModel.Triangles = tris; return convertedModel; }