示例#1
0
    public override List <VariableNode> apply(List <VariableNode> variables, DecisionTreeBase tree)
    {
        Debug.Log("Lsys apply");
        if (fromThis == null)
        {
            throw new System.Exception("transform from this cannot be null");
        }
        if (condition())
        {
            List <string> temp = new List <string>();
            for (int i = 0; i < variables.Count; i++)
            {
                temp.Add(variables[i].name_);
            }

            var indices = MathXT.ListInListAt(temp, fromThis);
            List <VariableNode> toInstansiate = new List <VariableNode>();
            try{
                for (int i = 0; i < toThis.Count; i++)
                {
                    toInstansiate.Add(tree.variables[toThis[i]]);
                }
            }
            catch
            {
                throw new System.Exception("a variable has not been defined");
            }
            //done building variable nodes
            //now replace nodes end to start

            //add transformaaion code here
            for (int i = indices.Count - 1; i >= 0; i--)
            {
                variables.RemoveRange(i, fromThis.Count);
                variables.InsertRange(i, toInstansiate);
            }
            //throw new NotImplementedException();
            return(variables);
        }
        else
        {
            return(variables);
        }
    }
示例#2
0
    /// <summary>
    /// Tesselate this mesh subdivides each triangle in the mesh into 4 triangles
    /// should not be run more than four times even on very simple meshes
    /// </summary>
    public void Tesselate()
    {
        try
        {
            var tempVerts   = new Vector3[triangles.Length * 4];
            var tempUv      = new Vector2[triangles.Length * 4];
            var tempTris    = new int[triangles.Length * 4];
            var tempNormals = new Vector3[triangles.Length * 4];

            for (int i = 0; i < (triangles.Length / 3); i++)
            {
                tempTris[i * 12]    = (i * 12);  //triangles[i*3];
                tempVerts[i * 12]   = vertices[triangles[i * 3]];
                tempNormals[i * 12] = normals[triangles[i * 3]];
                tempUv[i * 12]      = uv[triangles[i * 3]];

                Vector2 uvM0 = MathXT.midPoint(uv[triangles[(i * 3) + 1]], uv[triangles[(i * 3) + 2]]);
                Vector2 uvM1 = MathXT.midPoint(uv[triangles[(i * 3)]], uv[triangles[(i * 3) + 2]]);
                Vector2 uvM2 = MathXT.midPoint(uv[triangles[(i * 3)]], uv[triangles[(i * 3) + 1]]);

                Vector3 m0 = MathXT.midPoint(vertices[triangles[(i * 3) + 2]], vertices[triangles[(i * 3) + 1]]);
                Vector3 m1 = MathXT.midPoint(vertices[triangles[(i * 3)]], vertices[triangles[(i * 3) + 2]]);
                Vector3 m2 = MathXT.midPoint(vertices[triangles[(i * 3)]], vertices[triangles[(i * 3) + 1]]);

                tempVerts[(i * 12) + 1]   = m2;
                tempTris[(i * 12) + 1]    = (i * 12) + 1;
                tempNormals[(i * 12) + 1] = normals[triangles[i * 3]];
                tempUv[(i * 12) + 1]      = uvM2;

                tempVerts[(i * 12) + 2]   = m1;
                tempTris[(i * 12) + 2]    = (i * 12) + 2;
                tempNormals[(i * 12) + 2] = normals[triangles[i * 3]];
                tempUv[(i * 12) + 2]      = uvM1;

                tempVerts[(i * 12) + 3]   = vertices[triangles[(i * 3) + 1]];
                tempTris[(i * 12) + 3]    = (i * 12) + 3;//triangles[(i*3)+1];
                tempNormals[(i * 12) + 3] = normals[triangles[(i * 3) + 1]];
                tempUv[(i * 12) + 3]      = uv[triangles[(i * 3) + 1]];

                tempVerts[(i * 12) + 4]   = m0;
                tempTris[(i * 12) + 4]    = (i * 12) + 4;
                tempNormals[(i * 12) + 4] = normals[triangles[(i * 3) + 1]];
                tempUv[(i * 12) + 4]      = uvM0;

                tempVerts[(i * 12) + 5]   = m2;
                tempTris[(i * 12) + 5]    = (i * 12) + 5;
                tempNormals[(i * 12) + 5] = normals[triangles[(i * 3) + 1]];
                tempUv[(i * 12) + 5]      = uvM2;
                //triangle 3
                tempVerts[(i * 12) + 6]   = vertices[triangles[(i * 3) + 2]];
                tempTris[(i * 12) + 6]    = (i * 12) + 6;//triangles[(i*3)+2];
                tempNormals[(i * 12) + 6] = normals[triangles[(i * 3) + 2]];
                tempUv[(i * 12) + 6]      = uv[triangles[(i * 3) + 2]];

                tempVerts[(i * 12) + 7]   = m1;
                tempTris[(i * 12) + 7]    = (i * 12) + 7;
                tempNormals[(i * 12) + 7] = normals[triangles[(i * 3) + 2]];
                tempUv[(i * 12) + 7]      = uvM1;

                tempVerts[(i * 12) + 8]   = m0;
                tempTris[(i * 12) + 8]    = (i * 12) + 8;
                tempNormals[(i * 12) + 8] = normals[triangles[(i * 3) + 2]];
                tempUv[(i * 12) + 8]      = uvM0;
                //triangle 4 last one
                tempVerts[(i * 12) + 9]   = m0;
                tempTris[(i * 12) + 9]    = (i * 12) + 9;
                tempNormals[(i * 12) + 9] = normals[triangles[(i * 3) + 1]];
                tempUv[(i * 12) + 9]      = uvM0;

                tempVerts[(i * 12) + 10]   = m1;
                tempTris[(i * 12) + 10]    = (i * 12) + 10;
                tempNormals[(i * 12) + 10] = normals[triangles[(i * 3) + 2]];
                tempUv[(i * 12) + 10]      = uvM1;

                tempVerts[(i * 12) + 11]   = m2;
                tempTris[(i * 12) + 11]    = (i * 12) + 11;
                tempNormals[(i * 12) + 11] = normals[triangles[(i * 3)]];
                tempUv[(i * 12) + 11]      = uvM2;
            }
            triangles = tempTris;
            vertices  = tempVerts;
            uv        = tempUv;
            normals   = tempNormals;
        }
        catch (System.Exception e)
        {
            UnityEngine.Debug.LogException(e);
        }
    }