public GcmfTriangleStripGroup(ObjMtlMesh objMesh) : this() { foreach (ObjMtlFace face in objMesh.Faces) { Items.Add(new GcmfTriangleStrip(this, face)); } }
public GcmfMesh(ObjMtlMesh mesh, Dictionary <ObjMtlMaterial, int> modelMaterialMapping) : this() { PrimaryMaterialIdx = Convert.ToUInt16(modelMaterialMapping[mesh.Material]); Obj1StripsCcw = new GcmfTriangleStripGroup(mesh); RecalculateBoundingSphere(); }
public GcmfMesh(ObjMtlMesh mesh, Dictionary <ObjMtlMaterial, int> modelMaterialMapping, string presetFolder) : this() { PrimaryMaterialIdx = Convert.ToUInt16(modelMaterialMapping[mesh.Material]); Obj1StripsCcw = new GcmfTriangleStripGroup(mesh); RecalculateBoundingSphere(); Unk10 = (ushort)(Math.Round((float)0xFF * mesh.Material.Transparency)); if (Unk10 != 0xFF) { Layer = MeshLayer.Layer2; } if (mesh.Material.Unshaded) { RenderFlags |= (RenderFlag)0x1; } Match meshPreset = Regex.Match(mesh.Material.Name, @"(?<=MESH_)[^\]]*"); if (presetFolder != null && meshPreset.Success) { string[] lines = System.IO.File.ReadAllLines(String.Format("{0}\\{1}.txt", presetFolder, meshPreset.Value)); for (int i = 0; i < lines.Length; i++) { string[] line = lines[i].Split(); if (line.Length == 2) { switch (line[0]) { case "RENDER_FLAGS": RenderFlags = (GcmfMesh.RenderFlag)Convert.ToUInt32(line[1], 16); break; case "LAYER": Layer = (GcmfMesh.MeshLayer)Convert.ToUInt32(line[1], 16); break; case "UNKNOWN_4": Unk4 = Convert.ToUInt32(line[1], 16); break; case "UNKNOWN_8": Unk8 = Convert.ToUInt32(line[1], 16); break; case "UNKNOWN_C": UnkC = Convert.ToUInt32(line[1], 16); break; case "UNKNOWN_10": Unk10 = Convert.ToUInt16(line[1], 16); break; case "UNKNOWN_14": Unk14 = Convert.ToUInt16(line[1], 16); break; case "UNKNOWN_16": PrimaryMaterialIdx = Convert.ToUInt16(line[1], 16); break; case "UNKNOWN_18": SecondaryMaterialIdx = Convert.ToUInt16(line[1], 16); break; case "UNKNOWN_1A": TertiaryMaterialIdx = Convert.ToUInt16(line[1], 16); break; case "MATRIX_SPECIFIC_IDS_ONE": TransformMatrixSpecificIdxsObj1[0] = Convert.ToByte(line[1]); break; case "MATRIX_SPECIFIC_IDS_TWO": TransformMatrixSpecificIdxsObj1[1] = Convert.ToByte(line[1]); break; case "MATRIX_SPECIFIC_IDS_THREE": TransformMatrixSpecificIdxsObj1[2] = Convert.ToByte(line[1]); break; case "MATRIX_SPECIFIC_IDS_FOUR": TransformMatrixSpecificIdxsObj1[3] = Convert.ToByte(line[1]); break; case "MATRIX_SPECIFIC_IDS_FIVE": TransformMatrixSpecificIdxsObj1[4] = Convert.ToByte(line[1]); break; case "MATRIX_SPECIFIC_IDS_SIXE": TransformMatrixSpecificIdxsObj1[5] = Convert.ToByte(line[1]); break; case "MATRIX_SPECIFIC_IDS_SEVEN": TransformMatrixSpecificIdxsObj1[6] = Convert.ToByte(line[1]); break; case "MATRIX_SPECIFIC_IDS_EIGHT": TransformMatrixSpecificIdxsObj1[7] = Convert.ToByte(line[1]); break; case "BOUNDING_SPHERE_CENTER_X": BoundingSphereCenter = new OpenTK.Vector3(Convert.ToSingle(line[1]), BoundingSphereCenter.Y, BoundingSphereCenter.Z); break; case "BOUNDING_SPHERE_CENTER_Y": BoundingSphereCenter = new OpenTK.Vector3(BoundingSphereCenter.X, Convert.ToSingle(line[1]), BoundingSphereCenter.Z); break; case "BOUNDING_SPHERE_CENTER_Z": BoundingSphereCenter = new OpenTK.Vector3(BoundingSphereCenter.X, BoundingSphereCenter.Y, Convert.ToSingle(line[1])); break; case "UNKNOWN_3C": Unk3C = Convert.ToSingle(line[1]); break; case "UNKNOWN_40": Unk40 = Convert.ToUInt32(line[1], 16); break; default: throw new InvalidOperationException(String.Format("Mesh preset {0} contains an invalid entry.", meshPreset.Value)); } calculatedUsedMaterialCount = Convert.ToByte(((PrimaryMaterialIdx != ushort.MaxValue) ? 1 : 0) + ((SecondaryMaterialIdx != ushort.MaxValue) ? 1 : 0) + ((TertiaryMaterialIdx != ushort.MaxValue) ? 1 : 0)); } else { throw new InvalidOperationException(String.Format("Mesh preset {0} is not valid.", meshPreset.Value)); } } } }