Exemple #1
0
    public void Update()
    {
        mesh.Clear();
        polyline.Clear();
        secPolyline.Clear();

        for (int i = 0; i < transform.childCount; i++)
        {
            polyline.Add(new Vertex(transform.GetChild(i).transform.position));
        }

        secPolyline = new Polyline(
            polyline.VerticesToParameter(start),
            new Vertex[1] {
            polyline.VertexAtParameter(start)
        },
            polyline.Inset(width).VerticesBetweenParameter(start, end),
            new Vertex[1] {
            polyline.VertexAtParameter(end)
        },
            polyline.VerticesFromParameter(end)
            );
        //preVertices = new Polyline(polyline.VerticesToParameter(start));
        //postVertices = new Polyline(polyline.VerticesFromParameter(end));
        //midvertices = new Polyline(polyline.VerticesBetweenParameter(start, end));

        //StartVertex = polyline.VertexAtParameter(start);
        //EndVertex = polyline.VertexAtParameter(end);

        new TriangleStrip(polyline, secPolyline, mesh, MaterialManager.GetMaterial("diffuseBlue"));

        mesh.FillMesh(transform, false);
    }
Exemple #2
0
    public void FillMeshDivideMaterials(Transform transform, bool excludingChilds, bool destroyChildsFirst)
    {
        if (destroyChildsFirst)
        {
            destroyAllSubmeshContainer(transform);
        }
        if (!mC)
        {
            mC = transform.gameObject.GetComponent <MeshCollider>();
        }
        if (!mF)
        {
            mF = transform.gameObject.GetComponent <MeshFilter>();
        }
        if (!mR)
        {
            mR = transform.gameObject.GetComponent <MeshRenderer>();
        }

        if (mC.sharedMesh != null)
        {
            mC.sharedMesh.Clear();
        }
        mC.sharedMesh = null;
        if (mF.sharedMesh != null)
        {
            mF.sharedMesh.Clear();
        }

        mR.materials = new Material[0];

        if (excludingChilds)
        {
            tmpMaterialTriangles = materialTriangles;
        }
        else
        {
            tmpMaterialTriangles = CollectTriangles();
        }

        foreach (KeyValuePair <Material, List <Triangle> > kV in tmpMaterialTriangles)
        {
            // IS THIS CORRECT?! WE MIGHT LOSE A TRIANGLE...SO BETTER CHECK IT AGAIN
            int i = 0;
            while (i < kV.Value.Count)
            {
                Transform   submeshTransform   = createSubmeshContainerGameobject(transform, this.name + "SubMesh" + kV.Key.name + i);
                ModularMesh submeshModularMesh = new ModularMesh(this, this.name + "SubMesh" + kV.Key.name + i);
                if (i + 21666 < kV.Value.Count)
                {
                    submeshModularMesh.AddTriangles(kV.Value.GetRange(i, 21666), kV.Key);
                }
                else
                {
                    submeshModularMesh.AddTriangles(kV.Value.GetRange(i, kV.Value.Count - i), kV.Key);
                }
                submeshModularMesh.FillMesh(submeshTransform, false);

                i += 21666;
            }
        }
    }
Exemple #3
0
    public void Generate()
    {
        Debug.Log("Generating");
        polygon.Clear();
        rotatedPolygons.Clear();
        strips.Clear();
        ModularMesh mesh = new ModularMesh((ModularMesh)null);


        for (int i = 0; i < vertexObjects.Length; i++)
        {
            polygon.Add(new Vertex(vertexObjects[i].transform.position));
        }
        polygon.MakeClockwise();
        rotatedPolygons.Add(polygon);

        if (thisOrThat == buildingType.version1)
        {
            for (int i = 1; i <= times; i++)
            {
                if (i % 10 == 0)
                {
                    rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle * 10));
                }
                else
                {
                    rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle));
                }

                rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Translate(Vector3.up * height));

                strips.Add(new QuadStrip(rotatedPolygons[rotatedPolygons.Count - 1], rotatedPolygons[rotatedPolygons.Count - 2], mesh, MaterialManager.GetMaterial("diffuseWhite")));
            }

            ceiling = rotatedPolygons[rotatedPolygons.Count - 1].Triangulate(mesh, MaterialManager.GetMaterial("diffuseWhite"));
        }
        if (thisOrThat == buildingType.version2)
        {
            for (int i = 1; i <= times; i++)
            {
                if (i % 10 == 0)
                {
                    rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle * 10).Translate(height * Vector3.up));
                }
                else
                {
                    rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle).Translate(height * Vector3.up));
                }

                strips.Add(new QuadStrip(rotatedPolygons[rotatedPolygons.Count - 1], rotatedPolygons[rotatedPolygons.Count - 2], mesh, MaterialManager.GetMaterial("diffuseWhite")));
            }

            ceiling = rotatedPolygons[rotatedPolygons.Count - 1].Triangulate(mesh, MaterialManager.GetMaterial("diffuseWhite"));
        }
        if (thisOrThat == buildingType.version3)
        {
            for (int i = 1; i <= times; i++)
            {
                rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle).Translate(height * Vector3.up));

                strips.Add(new QuadStrip(rotatedPolygons[rotatedPolygons.Count - 1], rotatedPolygons[rotatedPolygons.Count - 2], mesh, MaterialManager.GetMaterial("diffuseWhite")));
            }

            for (int i = 0; i < wallSmoothingGroups.Length; i++)
            {
                wallSmoothingGroups[i] = new SmoothingGroup();
            }

            for (int i = 0; i < strips.Count; i++)
            {
                for (int j = 0; j < strips[i].Quads.Count; j++)
                {
                    strips[j].AddSmoothingGroup(wallSmoothingGroups[i]);
                }
            }

            ceiling = rotatedPolygons[rotatedPolygons.Count - 1].Triangulate(mesh, MaterialManager.GetMaterial("diffuseWhite"));

            ceiling.AddSmoothingGroup(new SmoothingGroup());
        }
        if (thisOrThat == buildingType.version4)
        {
            for (int i = 1; i <= times; i++)
            {
                rotatedPolygons.Add(rotatedPolygons[rotatedPolygons.Count - 1].Rotate(angle).Translate(height * Vector3.up).Inset(amount));

                strips.Add(new QuadStrip(rotatedPolygons[rotatedPolygons.Count - 1], rotatedPolygons[rotatedPolygons.Count - 2], mesh, MaterialManager.GetMaterial("diffuseWhite")));
            }

            ceiling = rotatedPolygons[rotatedPolygons.Count - 1].Triangulate(mesh, MaterialManager.GetMaterial("diffuseWhite"));
        }
        if (thisOrThat == buildingType.version5)
        {
            rotatedPolygons.Add(rotatedPolygons[0].Translate(height * Vector3.up));
            strips.Add(new QuadStrip(rotatedPolygons[rotatedPolygons.Count - 1], rotatedPolygons[0], mesh, MaterialManager.GetMaterial("diffuseWhite")));

            ceiling = rotatedPolygons[rotatedPolygons.Count - 1].Triangulate(mesh, MaterialManager.GetMaterial("diffuseWhite"));
        }


        mesh.FillMesh(transform, false);

        rotatedPolygons.Clear();
        strips.Clear();
        ceiling = null;
        Debug.Log("Generating done");
    }