Exemplo n.º 1
0
    public void AddSubMesh(Vector3[] verts)
    {
        Bounds aabb = new Bounds();

        aabb.center = GlobalMethods.AverageVector(verts);
        foreach (Vector3 v in verts)
        {
            aabb.Encapsulate(v);
        }

#if UNITY_EDITOR
        if (debug != DEBUG_LEVEL.None)
        {
            Debug.Log("The AABB center is: " + aabb.center + ", the extents are: " + aabb.extents);
        }
#endif

        subTris.Add(new List <int>());
        mesh.subMeshCount++;

        List <int> tris = new List <int>();
        for (int i = 0; i < mesh.triangles.Length; i += 3)
        {
#if UNITY_EDITOR
            if (debug == DEBUG_LEVEL.Advanced)
            {
                Debug.Log(("Testing AABB against these three points: " + transform.TransformPoint(mesh.vertices[mesh.triangles[i]]) +
                           ", " + transform.TransformPoint(mesh.vertices[mesh.triangles[i + 1]]) +
                           ", " + transform.TransformPoint(mesh.vertices[mesh.triangles[i + 2]])));
            }
#endif

            if (aabb.Contains(transform.TransformPoint(mesh.vertices[mesh.triangles[i]])) ||
                aabb.Contains(transform.TransformPoint(mesh.vertices[mesh.triangles[i + 1]])) ||
                aabb.Contains(transform.TransformPoint(mesh.vertices[mesh.triangles[i + 2]])))
            {
#if UNITY_EDITOR
                if (debug == DEBUG_LEVEL.Advanced)
                {
                    Debug.Log("AABB Test returned true! Adding triangle.");
                }
#endif
                tris.Add(mesh.triangles[i]);
                tris.Add(mesh.triangles[i + 1]);
                tris.Add(mesh.triangles[i + 2]);

                subTris[subTris.Count - 1].Add(mesh.triangles[i]);
                subTris[subTris.Count - 1].Add(mesh.triangles[i + 1]);
                subTris[subTris.Count - 1].Add(mesh.triangles[i + 2]);
            }
        }

        mesh.SetTriangles(tris.ToArray(), mesh.subMeshCount - 1);
        SetMainMeshTris(true);
    }