public override void OnValidate() { Debug.Log("tiling3 validate"); if (generator == null) { //generator = new RidgeGen2D(); generator = new Perlin2DGenerator(); generator.newNoise(noise_con_set); } viewer = GetComponent <NoiseViewer>(); viewer.setNoiseController(this); sendNoiseToViewer(); }
public override void OnValidate() { Debug.Log("Noise Controler: OnValidate"); if (generator == null) { generator = new Perlin2DGenerator(); generator.newNoise(noise_con_set); } viewer = GetComponent <NoiseViewer>(); viewer.setNoiseController(this); Debug.Log("is view null: " + viewer == null); sendNoiseToViewer(); }
public TilingGenerator() { perlin = new Perlin2DGenerator(); }
public RidgeGen2D() { perlin = new Perlin2DGenerator(); }
public Perlin1D() { perlin = new Perlin2DGenerator(); }
void GenerateSurface(Mesh mesh) { Vector3[] vertices = mesh.vertices; int[] indices = mesh.triangles; Vector2[] uvs = mesh.uv; mesh.Clear(); //subdivision = how many squares per row/col int subdivision = 250; int stride = subdivision + 1; int num_vert = stride * stride; int num_tri = subdivision * subdivision * 2; indices = new int[num_tri * 3]; int index_ptr = 0; for (int i = 0; i < subdivision; i++) { for (int j = 0; j < subdivision; j++) { int quad_corner = i * stride + j; indices[index_ptr] = quad_corner; indices[index_ptr + 1] = quad_corner + stride; indices[index_ptr + 2] = quad_corner + stride + 1; indices[index_ptr + 3] = quad_corner; indices[index_ptr + 4] = quad_corner + stride + 1; indices[index_ptr + 5] = quad_corner + 1; index_ptr += 6; } } Debug.Assert(index_ptr == indices.Length); const float xz_start = -5; const float xz_end = 5; float step = (xz_end - xz_start) / (float)(subdivision); vertices = new Vector3[num_vert]; uvs = new Vector2[num_vert]; Perlin2DGenerator perlin = new Perlin2DGenerator(); float[,] height1 = perlin.Perlin2DNoise(stride, (float)5, 4); float[,] height2 = perlin.Perlin2DNoise(stride, (float)7, 4); float[,] height3 = perlin.Perlin2DNoise(stride, (float)9, 4); for (int i = 0; i < stride; i++) { for (int j = 0; j < stride; j++) { // notice the bahavior here bool show_backface = false; float cur_x; float cur_z; //i don't know how this happened(showing back faces) if (show_backface) { cur_x = xz_start + i * step; cur_z = xz_start + j * step; } else { cur_x = xz_start + j * step; cur_z = xz_start + i * step; } int water_dom = 50; float height_sum = (float)((height1[i, j] + height2[i, j] + height3[i, j]) * 5 / 8.75); float water_ripple = (Mathf.Sin(i / 2 / Mathf.PI) + Mathf.Sin(j / 2 / Mathf.PI) - 2 + Random.value - Random.value) / water_dom; float cur_y = (float)(height_sum > -0.001 ? height_sum:(water_ripple > -0.001?-0.001:water_ripple)); vertices[i * stride + j] = new Vector3(cur_x, cur_y, cur_z); uvs[i * stride + j] = new Vector2(cur_x / 10.0f, cur_z / 10.0f); } } mesh.vertices = vertices; mesh.uv = uvs; mesh.triangles = indices; mesh.RecalculateNormals(); int num_objs = 10; int rand_index = 0; for (int i = 0; i < num_objs; i++) { rand_index = (int)Mathf.Floor(Random.value * (stride * stride - 1)); Vector3 pos = vertices[rand_index]; if (pos.y > 2.2) { Vector3 tree_normal = mesh.normals[rand_index]; Instantiate(objectToPlace); objectToPlace.transform.LookAt(tree_normal, Vector3.up); // Debug.Log(objectToPlace.transform.rotation); objectToPlace.transform.position = (pos); } } }