Пример #1
0
    void GenerateData(MeshRenderer r)
    {
        var targetMatrix = transform.worldToLocalMatrix * r.transform.localToWorldMatrix;

        Mesh targetMesh = r.gameObject.GetComponent <MeshFilter> ().sharedMesh;

        int[]     triangles = targetMesh.triangles;
        Vector3[] vertexes  = targetMesh.vertices;

        //拼装成三角形
        for (int i = 0; i < triangles.Length; i += 3)
        {
            //使用三角形索引号取顶点坐标可以保证组成的正确的显示三角形
            int index0 = triangles[i];
            int index1 = triangles[i + 1];
            int index2 = triangles[i + 2];

            Vector3 v0 = vertexes[index0];
            Vector3 v1 = vertexes[index1];
            Vector3 v2 = vertexes[index2];

            v0 = targetMatrix.MultiplyPoint(v0);
            v1 = targetMatrix.MultiplyPoint(v1);
            v2 = targetMatrix.MultiplyPoint(v2);

            var list = new List <Vector3> ();
            list.Add(v0);
            list.Add(v1);
            list.Add(v2);

            //每组三角形都进行检查
            if (CollisionChecker.Checker(list))
            {
                Vector3 first  = v0 - v1;
                Vector3 second = v0 - v2;
                Vector3 normal = Vector3.Cross(first, second).normalized;
                AddPolygon(list.ToArray(), normal);
                GenerateMesh();
            }
        }
    }