public void BuildLODs() { ClearLODs(); if (numberLODs == 0) { return; } if (m_rootLODs == null) { m_rootLODs = this.transform.Find("LODs"); } int sidesPrev = sides; for (int i = 0; i < numberLODs; i++) { float koeff = koeffLOD * (i + 1); int tris = (int)((float)triangles / koeff); int newsides = CalculateParametersByPolycount(tris, hasThickness, m_splines.Samples.Count); if (newsides < sidesPrev) { TubeSettings settings = new TubeSettings() { hasThickness = hasThickness, radius = radius, samples = m_splines.Samples, shellType = shellType, sides = newsides, thickness = thickness }; MeshBuilder builder = new MeshBuilder(settings); MeshBuilder.CustomMesh mesh = builder.Build(); TubeObject lod = new TubeObject(); lod.SetTube(this.m_rootLODs); lod.WriteMesh(mesh); lod.go.name = "lod" + (i + 1); lods.Add(lod); sidesPrev = newsides; } else { Debug.LogWarning("You are reached a triangles limit!"); } } }
public void WriteMesh(MeshBuilder.CustomMesh cmesh) { if (mesh == null) { mesh = new Mesh(); mesh.name = "tube"; } cmesh.WriteMesh(ref mesh); mesh.RecalculateNormals(); MeshUtility.Optimize(mesh); filter.sharedMesh = mesh; }
public void RebuildMesh() { if (points.Count < 2) { return; } CheckParametersBound(); EvaluateSpline(); if (m_splines.Samples.Count < 2) { return; } if (ParameterMode == eParameterMode.ByPolyCount) { sides = CalculateParametersByPolycount(triangles, hasThickness, m_splines.Samples.Count); } else { triangles = CalculateTrianglesCount(sides, hasThickness, m_splines.Samples.Count); } TubeSettings settings = new TubeSettings() { hasThickness = hasThickness, radius = radius, samples = m_splines.Samples, shellType = shellType, sides = sides, thickness = thickness }; MeshBuilder builder = new MeshBuilder(settings); MeshBuilder.CustomMesh mesh = builder.Build(); WriteMesh(mesh); }
void WriteMesh(MeshBuilder.CustomMesh cmesh) { m_tube.WriteMesh(cmesh); }