//--------------------------------------------------------------------------------------------------------- private unsafe Mesh ConvertFrameToMesh(MD2Frame frame) { List <Vector3> newVertices = new List <Vector3>(); List <Vector3> newNormals = new List <Vector3>(); List <Vector2> newUVs = new List <Vector2>(); List <int> newTriangles = new List <int>(); for (int t = 0; t < frame.Triagles.Length; t++) { MD2Triangle triagle = frame.Triagles[t]; for (int i = 0; i < 3; i++) { Vector3 vertex = frame.Vertices[triagle.index_xyz[i]]; Vector3 normal = frame.Normals[triagle.index_xyz[i]]; Vector2 uv = frame.UVs[triagle.index_st[i]]; bool doesExistsSuchVertex = false; int index = 0; for (index = 0; index < newVertices.Count; index++) { if (newVertices[index] == vertex && newUVs[index] == uv && newNormals[index] == normal) { doesExistsSuchVertex = true; break; } } newTriangles.Add(index); if (doesExistsSuchVertex == false) { newVertices.Add(vertex); newNormals.Add(normal); newUVs.Add(uv); } } } Mesh mesh = new Mesh(); mesh.Clear(); mesh.vertices = newVertices.ToArray(); mesh.normals = newNormals.ToArray(); mesh.uv = newUVs.ToArray(); mesh.triangles = newTriangles.ToArray(); mesh.RecalculateBounds(); mesh.name = frame.Name; return(mesh); }
//--------------------------------------------------------------------------------------------------------- private unsafe MD2Triangle[] ExtractAllTringles() { fixed(byte *pRawData = &RawFile[0]) { MD2Triangle[] triangles = new MD2Triangle[Header.num_tris]; for (int i = 0; i < Header.num_tris; i++) { MD2Triangle *pTriangle = (MD2Triangle *)&pRawData[i * sizeof(MD2Triangle) + Header.ofs_tris]; triangles[i] = *pTriangle; } return(triangles); } }