Beispiel #1
0
    /// <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);
    }
Beispiel #2
0
 /// <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)));
 }
Beispiel #3
0
 private static MeshPoly ClipPolyByPlane(MeshPoly poly, MeshClippingPlane plane, Matrix4x4 worldToMeshSpace, List <(Vector3 a, Vector3 b)> newEdges)