GameObject CreateRoadOutline(GameObject line, Material material, float width) { GameObject outline = new GameObject(line.name + "outline"); outline.transform.parent = line.transform; material.renderQueue = -((int)feature.sort - 1); GOLineMesh lineMesh = new GOLineMesh(feature.convertedGeometry); lineMesh.width = width; lineMesh.load(outline); mesh = lineMesh.mesh; mesh = SimpleExtruder.Extrude(mesh, outline, 0.05f); Vector2[] uvs2 = new Vector2[mesh.vertices.Length]; for (int i = 0; i < uvs2.Length; i++) { uvs2[i] = new Vector2(mesh.vertices[i].x, mesh.vertices[i].z); } mesh.uv = uvs2; mesh.RecalculateBounds(); outline.GetComponent <MeshFilter>().sharedMesh = mesh; Vector3 position = outline.transform.position; position.y = -0.01f; outline.transform.localPosition = position; outline.GetComponent <Renderer>().material = material; return(outline); }
public void BuildLine(GameObject line, GOLayer layer, GORenderingOptions renderingOptions, GOMap map) { if (feature.convertedGeometry.Count == 2 && feature.convertedGeometry[0].Equals(feature.convertedGeometry[1])) { return; } if (renderingOptions.tag.Length > 0) { line.tag = renderingOptions.tag; } if (renderingOptions.material) { renderingOptions.material.renderQueue = -(int)feature.sort; } if (renderingOptions.outlineMaterial) { renderingOptions.outlineMaterial.renderQueue = -(int)feature.sort; } GOLineMesh lineMesh = new GOLineMesh(feature.convertedGeometry); lineMesh.width = renderingOptions.lineWidth * Global.tilesizeRank; lineMesh.load(line); mesh = lineMesh.mesh; mesh = SimpleExtruder.Extrude(mesh, line, 0.05f); line.GetComponent <MeshFilter>().sharedMesh = mesh; line.GetComponent <Renderer>().material = renderingOptions.material; Vector3 position = line.transform.position; position.y = feature.y * Global.tilesizeRank; line.transform.position = position; if (renderingOptions.outlineMaterial != null) { GameObject outline = CreateRoadOutline(line, renderingOptions.outlineMaterial, Global.tilesizeRank * (renderingOptions.lineWidth + layer.defaultRendering.outlineWidth)); if (layer.useColliders) { outline.AddComponent <MeshCollider>().sharedMesh = outline.GetComponent <MeshFilter>().sharedMesh; } outline.layer = line.layer; outline.tag = line.tag; } else if (layer.useColliders) { // Mesh m = gameObject.GetComponent<MeshFilter> ().sharedMesh; line.AddComponent <MeshCollider>(); } }
public GameObject CreateModel(Layer layer, float height) { GameObject polygon = new GameObject(); try { Poly2Mesh.Polygon poly = new Poly2Mesh.Polygon(); poly.outside = convertedSubject; if (clips != null) { foreach (IList clipVerts in clips) { poly.holes.Add(CoordsToVerts(clipVerts)); } } MeshFilter filter = polygon.AddComponent <MeshFilter>(); polygon.AddComponent(typeof(MeshRenderer)); Mesh mesh = Poly2Mesh.CreateMesh(poly); if (mesh) { Vector2[] uvs = new Vector2[mesh.vertices.Length]; for (int i = 0; i < uvs.Length; i++) { uvs[i] = new Vector2(mesh.vertices[i].x, mesh.vertices[i].z); } mesh.uv = uvs; mesh2D = Mesh.Instantiate(mesh); if (height > 0) { mesh = SimpleExtruder.Extrude(mesh, polygon, height); } } filter.sharedMesh = mesh; if (layer.useColliders) { polygon.AddComponent <MeshCollider>().sharedMesh = mesh; } } catch (Exception ex) { Debug.Log("[PolygonHandler] Catched exeption: " + ex); } return(polygon); }
public Mesh loadExtruded(List <Vector3> _verts, float height) { verts = _verts; filter = gameObject.GetComponent <MeshFilter>(); if (filter == null) { filter = (MeshFilter)gameObject.AddComponent(typeof(MeshFilter)); } List <Vector3> vertices = verts.ToList(); Mesh mesh = CreateMesh(vertices); filter.sharedMesh = SimpleExtruder.Extrude(mesh, gameObject, height); return(mesh); }
public GameObject BuildPolygon(string name, GOLayer layer, float height) { //GameObject polygon = GameObject.Instantiate((GameObject)Resources.Load("Prefabs/CityBuildings/" + "Building_CornerHouse_A")); GameObject polygon = new GameObject(); Poly2Mesh.Polygon poly = new Poly2Mesh.Polygon(); poly.outside = feature.convertedGeometry; if (feature.clips != null) { foreach (IList clipVerts in feature.clips) { poly.holes.Add(GOFeature.CoordsToVerts(clipVerts)); } } MeshFilter filter = polygon.AddComponent <MeshFilter>(); polygon.AddComponent(typeof(MeshRenderer)); try { mesh = Poly2Mesh.CreateMesh(poly); } catch { } if (height > 1) { if (mesh) { Vector2[] uv2d = new Vector2[mesh.vertices.Length]; for (int i = 0; i < uv2d.Length; i++) { uv2d[i] = new Vector2(mesh.vertices[i].x, mesh.vertices[i].z); } var meshlemp = Mesh.Instantiate(mesh); meshlemp.uv = uv2d; mesh2D = Mesh.Instantiate(meshlemp); mesh.uv = uv2d; if (height > 0) { mesh = SimpleExtruder.Extrude(mesh, polygon, height); Vector2[] uvs3D = new Vector2[mesh.vertices.Length]; for (int i = 0; i < uvs3D.Length - 1; i++) { uvs3D[i] = new Vector2(Vector2.Distance(new Vector2(mesh.vertices[i + 1].x, mesh.vertices[i + 1].z), new Vector2(mesh.vertices[i].x, mesh.vertices[i].z)), mesh.vertices[i].y); } // uvs2[uvs2.Length - 1] = new Vector2(Mathf.Sqrt((float)(Math.Pow(mesh.vertices[0].x - mesh.vertices[uvs2.Length - 1].x, 2) + Math.Pow(mesh.vertices[0].z - mesh.vertices[uvs2.Length - 1].z, 2))), mesh.vertices[uvs2.Length - 1].y); uvs3D[uvs3D.Length - 1] = new Vector2(10, mesh.vertices[uvs3D.Length - 1].y); mesh.uv = uvs3D; } } } else { if (mesh) { Vector2[] uvs = new Vector2[mesh.vertices.Length]; for (int i = 0; i < uvs.Length; i++) { uvs[i] = new Vector2(mesh.vertices[i].x, mesh.vertices[i].z); } mesh.uv = uvs; if (height > 0) { mesh = SimpleExtruder.Extrude(mesh, polygon, height); } } } filter.sharedMesh = mesh; if (layer.useColliders) { polygon.AddComponent <MeshCollider>().sharedMesh = mesh; } return(polygon); }
public void BuildLine(GameObject line, GOLayer layer, GORenderingOptions renderingOptions, GOMap map) { if (feature.convertedGeometry.Count == 2 && feature.convertedGeometry[0].Equals(feature.convertedGeometry[1])) { return; } #if GOLINK feature.convertedGeometry = GOFeatureMeshBuilder.BreakLine(feature.convertedGeometry, map.goTerrain); #endif if (renderingOptions.tag.Length > 0) { line.tag = renderingOptions.tag; } if (renderingOptions.material) { renderingOptions.material.renderQueue = -(int)feature.sort; } if (renderingOptions.outlineMaterial) { renderingOptions.outlineMaterial.renderQueue = -(int)feature.sort; } GOLineMesh lineMesh = new GOLineMesh(feature.convertedGeometry); lineMesh.width = renderingOptions.lineWidth; lineMesh.load(line); mesh = lineMesh.mesh; line.GetComponent <Renderer>().material = renderingOptions.material; Vector3 position = line.transform.position; position.y = feature.y; #if GOLINK if (renderingOptions.polygonHeight > 0) { int offset = GOFeature.BuildingElevationOffset; line.GetComponent <MeshFilter> ().sharedMesh = SimpleExtruder.Extrude(line.GetComponent <MeshFilter> ().sharedMesh, line, renderingOptions.polygonHeight + offset); position.y -= offset; } #else #endif line.transform.position = position; if (renderingOptions.outlineMaterial != null) { GameObject outline = CreateRoadOutline(line, renderingOptions.outlineMaterial, renderingOptions.lineWidth + layer.defaultRendering.outlineWidth); if (layer.useColliders) { outline.AddComponent <MeshCollider> ().sharedMesh = outline.GetComponent <MeshFilter> ().sharedMesh; } outline.layer = line.layer; outline.tag = line.tag; } else if (layer.useColliders) { // Mesh m = gameObject.GetComponent<MeshFilter> ().sharedMesh; line.AddComponent <MeshCollider> (); } }