Example #1
0
    private void subdivide()
    {
        Vector3 p1 = Vertices.ElementAt(0);
        Vector3 p2 = Vertices.ElementAt(1);
        Vector3 p3 = Vertices.ElementAt(2);

        Vector3 middlepoint1 = calculateMiddlepoint(p1, p2);
        Vector3 middlepoint2 = calculateMiddlepoint(p2, p3);
        Vector3 middlepoint3 = calculateMiddlepoint(p3, p1);

        List <List <Vector3> > subNodes = new List <List <Vector3> > ()
        {
            new List <Vector3> ()
            {
                p1, middlepoint1, middlepoint3
            },
            new List <Vector3> ()
            {
                p2, middlepoint2, middlepoint1
            },
            new List <Vector3> ()
            {
                p3, middlepoint3, middlepoint2
            },
            new List <Vector3> ()
            {
                middlepoint1, middlepoint2, middlepoint3
            }
        };

        children = subNodes.ConvertAll(vertices =>
        {
            String gameObjectName              = generateNodeName(vertices);
            GameObject go                      = new GameObject(gameObjectName, typeof(Node), typeof(MeshRenderer), typeof(MeshFilter), typeof(MeshCollider));
            go.transform.parent                = gameObject.transform;
            go.GetComponent <Node> ().Depth    = gameObject.GetComponent <Node> ().Depth + 1;
            go.GetComponent <Node> ().Vertices = vertices;
            go.GetComponent <Node> ().Parent   = gameObject;

            go.GetComponent <MeshFilter> ().mesh.vertices = Vertices
                                                            .ConvertAll(vertex => vertex.normalized * 100)
                                                            .ToArray();
            go.GetComponent <MeshFilter> ().mesh.triangles = new int[] { 0, 1, 2 };
            go.GetComponent <MeshFilter> ().mesh.RecalculateNormals();
            go.GetComponent <MeshCollider>().sharedMesh      = go.GetComponent <MeshFilter> ().mesh;
            gameObject.GetComponent <MeshRenderer>().enabled = false;
            return(go);
        });
    }