private static void CreateVertices(ref TerrainVars tVars, List <Vector3> vertices) { int size = tVars.Size; int scale = tVars.Scale; for (int z = 0; z <= size; z++) { int xSize = size + z; for (int x = 0; x <= xSize; x++) { vertices.Add(new Vector3(x - Hex.cos60 * z - size / 2f, 0, (z - size) * Hex.sin60) * scale); } } for (int z = size + 1, i = 0; z <= 2 * size; z++, i++) { int xSize = 2 * size - i - 1; for (int x = 0; x <= xSize; x++) { vertices.Add(new Vector3(x - (size - 1 - i) * Hex.cos60 - size / 2f, 0, (z - size) * Hex.sin60) * scale); } } }
public static Mesh GenerateMesh(ref TerrainVars tVars) { Mesh mesh = new Mesh(); List <Vector3> vertices = new List <Vector3>(); List <int> triangles = new List <int>(); CreateVertices(ref tVars, vertices); CreateTriangles(ref tVars, triangles); mesh.vertices = vertices.ToArray(); mesh.triangles = triangles.ToArray(); return(mesh); }
private static void CreateTriangles(ref TerrainVars tVars, List <int> triangles) { int i = 0; int size = tVars.Size; for (int z = 0; z < size; z++, i++) { int xSize = size + z; for (int x = 0; x < xSize; x++, i++) { triangles.Add(i); triangles.Add(i + xSize + 1); triangles.Add(i + xSize + 2); triangles.Add(i); triangles.Add(i + xSize + 2); triangles.Add(i + 1); if (x == xSize - 1) { triangles.Add(i + 1); triangles.Add(i + xSize + 2); triangles.Add(i + xSize + 3); } } } for (int z = 0; z < size; z++, i++) { int xSize = 2 * size - z; for (int x = 0; x < xSize; x++, i++) { triangles.Add(i); triangles.Add(i + xSize + 1); triangles.Add(i + 1); if (x != xSize - 1) { triangles.Add(i + 1); triangles.Add(i + xSize + 1); triangles.Add(i + xSize + 2); } } } }
private static void AddNoise(ref TerrainVars tVars, ref NoiseVars nVars, ref MeshData mesh, Vector3 pos) { Vector3[] vertices = mesh.vertices; float height = tVars.Height; float[] noise = NoiseGenerator.noise(vertices, pos, ref nVars); for (int i = 0; i < vertices.Length; i++) { Vector3 currentVertex = vertices[i]; vertices[i].y = (noise[i] * 2 - 1) * height; } mesh.vertices = vertices; }
private static void AddNoise(ref TerrainVars tVars, ref NoiseVars nVars, ref MeshData mesh, Vector3 pos) { Vector3[] vertices = mesh.vertices; Color[] colors = new Color[vertices.Length]; Gradient gradient = tVars.gradient; float height = tVars.Height; float[] noise = NoiseGenerator.noise(vertices, pos, ref nVars); for (int i = 0; i < vertices.Length; i++) { Vector3 currentVertex = vertices[i]; colors[i] = gradient.Evaluate(noise[i]); vertices[i].y = (noise[i] * 2 - 1) * height; } mesh.vertices = vertices; mesh.colors = colors; mesh.RecalculateNormals(); }
public void AddHeights(ref TerrainVars tVars, ref NoiseVars nVars, Vector3 pos) { float height = tVars.Height; Vector3[] vertices = this.vertices; AnimationCurve curve = new AnimationCurve(tVars.curve.keys); // Get noise float[] noise = NoiseGenerator.noise(vertices, pos, ref nVars); for (int i = 0; i < vertices.Length; i++) { noise[i] = Mathf.Clamp01(curve.Evaluate(noise[i])); vertices[i].y = (noise[i] * 2 - 1) * height; } // Save mesh values this.vertices = vertices; }
public void AddHeightsAndColors(ref TerrainVars tVars, ref NoiseVars nVars, Vector3 pos) { Vector3[] vertices = this.vertices; Color[] colors = new Color[vertices.Length]; Gradient gradient = tVars.gradient; // Color keys float[] keys = gradient.colorKeys .Select(k => k.time).ToArray(); i1 = new float[vertices.Length]; i2 = new float[vertices.Length]; AnimationCurve curve = new AnimationCurve(tVars.curve.keys); float height = tVars.Height; // Get noise float[] noise = NoiseGenerator.noise(vertices, pos, ref nVars); for (int i = 0; i < vertices.Length; i++) { float cNoise = Mathf.Clamp01(curve.Evaluate(noise[i])); colors[i] = gradient.Evaluate(cNoise); vertices[i].y = (cNoise * 2 - 1) * height; try { if (cNoise < keys[1]) { i1[i] = 0; } if (cNoise > keys[0] && cNoise < keys[3]) { i2[i] = 1; } if (cNoise > keys[2] && cNoise < keys[5]) { i1[i] = 2; } if (cNoise > keys[4] && cNoise < keys[7]) { i2[i] = 3; } if (cNoise > keys[6]) { i1[i] = 4; } } catch (IndexOutOfRangeException) { }; } // Save mesh values this.vertices = vertices; this.colors = colors; RecalculateNormals(); SaveIndexes(); }