Example #1
0
    public void Update()
    {
//        if (amount != oldAmount)
//        {
//            insetPolygon = polygon.Inset(amount, null);
//            oldAmount = amount;
//        }

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

        polygon.MakeClockwise();

        polygonSurface = polygon.Triangulate(null, null);
        //insetPolygon = polygon.Inset(0.1f, null);
    }
Example #2
0
    public void CreateMesh(ModularMesh mesh)
    {
        layout = new Polygon();

        OSMNode node;

        //Discard last waynode if its the same as first
        if (way.WayNodes[0] == way.WayNodes[way.WayNodes.Count - 1])
        {
            for (int i = 0; i < way.WayNodes.Count - 1; i++)
            {
                if (osm.nodes.TryGetValue(way.WayNodes[i], out node))
                {
                    Vector3 pos = new Vector3(node.X, SRTMHeightProvider.GetInterpolatedHeight(node.Latitude, node.Longitude), node.Z);
                    layout.Add(new Vertex(pos));
                }
            }
        }
        else
        {
            for (int i = 0; i < way.WayNodes.Count; i++)
            {
                if (osm.nodes.TryGetValue(way.WayNodes[i], out node))
                {
                    Vector3 pos = new Vector3(node.X, SRTMHeightProvider.GetInterpolatedHeight(node.Latitude, node.Longitude), node.Z);
                    layout.Add(new Vertex(pos));
                }
            }
        }

        layout.MakeClockwise();

        leveledLayout = layout.LevelUp();

        area = leveledLayout.Triangulate(mesh, MaterialManager.GetMaterial("diffuseBlue"));
    }
Example #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");
    }