public GcmfMesh() { Layer = MeshLayer.Layer1; RenderFlags = (RenderFlag)0; Unk4 = 0xFFFFFFFF; Unk8 = 0x7F7F7FFF; UnkC = 0x00000000; Unk10 = 0x00FF; Unk14 = 0xFF00; PrimaryMaterialIdx = ushort.MaxValue; SecondaryMaterialIdx = ushort.MaxValue; TertiaryMaterialIdx = ushort.MaxValue; TransformMatrixSpecificIdxsObj1 = new byte[8]; for (int i = 0; i < TransformMatrixSpecificIdxsObj1.Length; i++) { TransformMatrixSpecificIdxsObj1[i] = byte.MaxValue; } BoundingSphereCenter = new Vector3(0.0f, 0.0f, 0.0f); Unk3C = 0; Unk40 = 0x00000014; Obj1StripsCcw = new GcmfTriangleStripGroup(); Obj1StripsCw = new GcmfTriangleStripGroup(); TransformMatrixSpecificIdxsObj2 = new byte[8]; for (int i = 0; i < TransformMatrixSpecificIdxsObj2.Length; i++) { TransformMatrixSpecificIdxsObj2[i] = byte.MaxValue; } Obj2StripsCcw = new GcmfTriangleStripGroup(); Obj2StripsCw = new GcmfTriangleStripGroup(); }
public GcmfTriangleStrip(GcmfTriangleStripGroup parentStripGroup, IEnumerable <ObjMtlVertex> vertexList) { foreach (ObjMtlVertex vtx in vertexList) { Add(new GcmfVertex(vtx)); } }
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)); } } } }