public List <Vertex[]> GetFaces(Faceset faceset, ref bool flip) { ushort[] indices = ToTriangleList(faceset, ref flip); var faces = new List <Vertex[]>(); for (int i = 0; i < indices.Length; i += 3) { faces.Add(new Vertex[] { VerticesA[indices[i + 0]], VerticesA[indices[i + 1]], VerticesA[indices[i + 2]], }); } return(faces); }
public ushort[] ToTriangleList(Faceset faceset, ref bool flip) { var converted = new List <ushort>(); for (int i = faceset.StartIndex; i < faceset.StartIndex + faceset.IndexCount - 2; i++) { ushort vi1 = Indices[i]; ushort vi2 = Indices[i + 1]; ushort vi3 = Indices[i + 2]; if (vi1 == 0xFFFF || vi2 == 0xFFFF || vi3 == 0xFFFF) { flip = false; } else { if (vi1 != vi2 && vi1 != vi3 && vi2 != vi3) { if (!flip) { converted.Add(vi1); converted.Add(vi2); converted.Add(vi3); } else { converted.Add(vi3); converted.Add(vi2); converted.Add(vi1); } } flip = !flip; } } return(converted.ToArray()); }