Ejemplo n.º 1
0
    public static TriangleInfo[] GetTriangles(MeshFilter filter)
    {
        Mesh mesh = filter.sharedMesh;

        if (mesh == null)
        {
            return(null);
        }
        Vector3[]      vertices  = mesh.vertices;
        int[]          tris      = mesh.triangles;
        TriangleInfo[] triangles = new TriangleInfo[tris.Length / 3];
        for (int i = 0; i < tris.Length; i += 3)
        {
            Vector3      v1  = filter.transform.TransformPoint(vertices[tris[i]]);
            Vector3      v2  = filter.transform.TransformPoint(vertices[tris[i + 1]]);
            Vector3      v3  = filter.transform.TransformPoint(vertices[tris[i + 2]]);
            AABBBoundBox box = new AABBBoundBox(Vector3.positiveInfinity, Vector3.negativeInfinity);
            box.Extend(v1);
            box.Extend(v2);
            box.Extend(v3);
            triangles[i / 3] = new TriangleInfo
            {
                p1 = v1,
                p2 = v2,
                p3 = v3,
            };
        }
        return(triangles);
    }
Ejemplo n.º 2
0
    private TriangleBound GroupBoundBox(List <TriangleInfo> infoList)
    {
        TriangleBound triangeBound = new TriangleBound();
        AABBBoundBox  bound        = new AABBBoundBox(Vector3.positiveInfinity, Vector3.negativeInfinity);

        triangeBound.triangles = new TriangleInfo[infoList.Count];

        for (int i = 0; i < infoList.Count; i++)
        {
            triangeBound.triangles[i] = infoList[i];
            bound.Extend(infoList[i].p1);
            bound.Extend(infoList[i].p2);
            bound.Extend(infoList[i].p3);
        }

        triangeBound.boundBox = bound;
        return(triangeBound);
    }