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); }
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")); }
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"); }