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