/// <summary> /// Convert arrays of unpacked mesh data into polys that can be clipped /// </summary> /// <param name="vertices"></param> /// <param name="uvs"></param> /// <param name="triangles"></param> /// <param name="normals"></param> /// <param name="tangents"></param> /// <param name="colors"></param> /// <returns></returns> private static List <MeshPoly> ArrayToPolys( Vector3[] vertices, Vector2[] uvs, int[] triangles, Vector3[] normals, Vector4[] tangents, Color[] colors) { List <MeshPoly> output = new List <MeshPoly>(); for (int i = 0; i < triangles.Length / 3; i++) { int j = i * 3; var newPoly = new MeshPoly(); newPoly.vertices.Add(GetVertexFromArray(triangles[j], vertices, uvs, normals, tangents, colors)); newPoly.vertices.Add(GetVertexFromArray(triangles[j + 1], vertices, uvs, normals, tangents, colors)); newPoly.vertices.Add(GetVertexFromArray(triangles[j + 2], vertices, uvs, normals, tangents, colors)); output.Add(newPoly); } return(output); }
/// <summary> /// Create a task to clip a new mesh. /// </summary> /// <param name="mesh"></param> /// <param name="clippingPlaneSet"></param> /// <param name="source"></param> /// <returns></returns> public static Task <Mesh> Clip(Mesh mesh, ClippingPlaneSet clippingPlaneSet, Matrix4x4 worldToMeshSpace, Mesh source = null) { return(ClipUnpack(mesh, clippingPlaneSet, worldToMeshSpace).ThenOnMainThread((x) => MeshPoly.ContructMesh(x, source))); }
private static MeshPoly ClipPolyByPlane(MeshPoly poly, MeshClippingPlane plane, Matrix4x4 worldToMeshSpace, List <(Vector3 a, Vector3 b)> newEdges)