void CreatePlane(int length, int width) { List <Vector3> vertices = new List <Vector3>(); //Generate grid of vertices for (int x = 0; x <= length; x++) { for (int z = 0; z <= width; z++) { Vector3 noiseVert = new Vector3(((float)x) / rangex, ((float)z) / rangey, noiseAmt); vertices.Add(new Vector3(x * offset, Perlin.Noise(noiseVert) * intensity, z * offset)); } } //Build Squares //Iterate through all but first x vert, all bust last y vert for (int x = 1; x <= length; x++) { for (int z = 0; z < length; z++) { mc.BuildTriangle(vertices[x * (width + 1) + (z + 1)], vertices[x * (width + 1) + z], vertices[(x - 1) * (width + 1) + (z + 1)]); mc.BuildTriangle(vertices[x * (width + 1) + z], vertices[(x - 1) * (width + 1) + z], vertices[(x - 1) * (width + 1) + (z + 1)]); } } meshFilter.mesh = mc.CreateMesh(); }
void CreateCube(Vector3 center) { Vector3 cubeSize = size * 0.5f; // top of the cube // t0 is top left point float x1 = center.x + cubeSize.x; float x2 = center.x - cubeSize.x; float x3 = center.x - cubeSize.x; float x4 = center.x + cubeSize.x; float z1 = center.z - cubeSize.z; float z2 = center.z - cubeSize.z; float z3 = center.z + cubeSize.z; float z4 = center.z + cubeSize.z; float height1 = center.y + cubeSize.y + bump * Perlin.Noise(x1 / FACTOR, z1 / FACTOR); float height2 = center.y + cubeSize.y + bump * Perlin.Noise(x2 / FACTOR, z2 / FACTOR); float height3 = center.y + cubeSize.y + bump * Perlin.Noise(x3 / FACTOR, z3 / FACTOR); float height4 = center.y + cubeSize.y + bump * Perlin.Noise(x4 / FACTOR, z4 / FACTOR); Vector3 t0 = new Vector3(x1, height1, z1); Vector3 t1 = new Vector3(x2, height2, z2); Vector3 t2 = new Vector3(x3, height3, z3); Vector3 t3 = new Vector3(x4, height4, z4); // bottom of the cube //Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); //Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); //Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); //Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); //// Bottom square //mc.BuildTriangle(b2, b1, b0); //mc.BuildTriangle(b3, b2, b0); //// Back square //mc.BuildTriangle(b0, t1, t0); //mc.BuildTriangle(b0, b1, t1); //mc.BuildTriangle(b1, t2, t1); //mc.BuildTriangle(b1, b2, t2); //mc.BuildTriangle(b2, t3, t2); //mc.BuildTriangle(b2, b3, t3); //mc.BuildTriangle(b3, t0, t3); //mc.BuildTriangle(b3, b0, t0); }
void Update() { mc.Clear(); // add vertices for (int i = 0; i <= width; i++) { float x = i * squareSize; for (int j = 0; j <= depth; j++) { float z = j * squareSize; // compute noise at given space time point float noiseOut = Perlin.Noise(noiseScale.x * i, noiseScale.y * Time.time, noiseScale.z * j); // normalize noise noiseOut += 1; noiseOut /= 2; // compute y-value from noise float y = noiseOut * maxHeight; // compute uv float u = (float)i / width; float v = (float)j / depth; // compute color from noise Color color = minColor + noiseOut * (maxColor - minColor); // add the vertex vertices[i, j] = new ColoredPoint(x, y, z, color.r, color.g, color.b); } } // build triangles out of those vertices for (int i = 0; i < width; i++) { for (int j = 0; j < depth; j++) { ColoredPoint a = vertices[i, j]; ColoredPoint b = vertices[i + 1, j]; ColoredPoint c = vertices[i, j + 1]; ColoredPoint d = vertices[i + 1, j + 1]; mc.BuildTriangle(d, b, a); mc.BuildTriangle(c, d, a); } } meshFilter.mesh = mc.CreateMesh(); }
void Update() { Vector3[] vertices = new Vector3[latitudeLineCount * longitudeLineCount]; int vtxIndex = 0; for (int j = 0; j < latitudeLineCount; j++) { float lat = 180 * ((float)(j + 1) / latitudeLineCount); for (int i = 0; i < longitudeLineCount; i++) { float lon = 360 * ((float)i / longitudeLineCount); Vector3 cartesian = new Vector3( radius * Mathf.Cos(lat) * Mathf.Cos(lon), radius * Mathf.Cos(lat) * Mathf.Sin(lon), radius * Mathf.Sin(lat) ); vertices[vtxIndex++] = cartesian; } } MeshCreator mc = new MeshCreator(); for (int i = 2; i < vertices.Length; i++) { mc.BuildTriangle(vertices[i - 2], vertices[i - 1], vertices[i]); } meshFilter.mesh = mc.CreateMesh(); }
void GenerateMesh(MeshCreator mc) { for (int i = 0; i < size; ++i) { for (int j = 0; j < size; ++j) { verts[i][j].y = CalculateHeight(i, j); } } for (int i = 0; i < size - 1; ++i) { for (int j = 0; j < size - 1; ++j) { mc.BuildTriangle(verts[i][j], verts[i + 1][j], verts[i + 1][j + 1]); mc.BuildTriangle(verts[i][j], verts[i + 1][j + 1], verts[i][j + 1]); } } }
private void GenerateTerrainMesh() { // Generate Squares for (int x = 0; x < meshWidth; x++) { for (int y = 0; y < meshLength; y++) { // Create Vertices Vector3 t0 = new Vector3(squareSize.x / 2, 0, -squareSize.y / 2); // top left Vector3 t1 = new Vector3(-squareSize.x / 2, 0, -squareSize.y / 2); // bottom left Vector3 t2 = new Vector3(-squareSize.x / 2, 0, squareSize.y / 2); // bottom right Vector3 t3 = new Vector3(squareSize.x / 2, 0, squareSize.y / 2); // top right // Shift Vertices to match point on mesh Vector3 offset = new Vector3(x * squareSize.x, 0, y * squareSize.y); t0 += offset; t1 += offset; t2 += offset; t3 += offset; // Add perlin variable to heights t0.y = Mathf.PerlinNoise(t0.x * perlinScaleFactor, t0.z * perlinScaleFactor) * heightStretchFactor; t1.y = Mathf.PerlinNoise(t1.x * perlinScaleFactor, t1.z * perlinScaleFactor) * heightStretchFactor; t2.y = Mathf.PerlinNoise(t2.x * perlinScaleFactor, t2.z * perlinScaleFactor) * heightStretchFactor; t3.y = Mathf.PerlinNoise(t3.x * perlinScaleFactor, t3.z * perlinScaleFactor) * heightStretchFactor; // Todo - Make volcanos float volcanoModifiedHeight = volcanoHeight * heightStretchFactor; t0.y = t0.y > volcanoModifiedHeight ? t0.y - (t0.y - volcanoModifiedHeight) * volcanoDipFactor : t0.y; t1.y = t1.y > volcanoModifiedHeight ? t1.y - (t1.y - volcanoModifiedHeight) * volcanoDipFactor : t1.y; t2.y = t2.y > volcanoModifiedHeight ? t2.y - (t2.y - volcanoModifiedHeight) * volcanoDipFactor : t2.y; t3.y = t3.y > volcanoModifiedHeight ? t3.y - (t3.y - volcanoModifiedHeight) * volcanoDipFactor : t3.y; // Builds Triangle _meshCreator.BuildTriangle(t0, t1, t2); _meshCreator.BuildTriangle(t0, t2, t3); } } // Build Mesh _meshFilter.mesh = _meshCreator.CreateMesh(); }
protected void CreateTerrainSqure(int x, int y) { Vector3 scaledSize = cubeSize * 0.5f; Vector3 center = new Vector3(x * cubeSize.x, 0, y * cubeSize.z); // top of the cube // t0 is top left point Vector3 t0 = new Vector3(center.x + scaledSize.x, center.y + scaledSize.y, center.z - scaledSize.z); Vector3 t1 = new Vector3(center.x - scaledSize.x, center.y + scaledSize.y, center.z - scaledSize.z); Vector3 t2 = new Vector3(center.x - scaledSize.x, center.y + scaledSize.y, center.z + scaledSize.z); Vector3 t3 = new Vector3(center.x + scaledSize.x, center.y + scaledSize.y, center.z + scaledSize.z); // Apply perlin noise to every vertice by mapping the coordinates to perlin range t0.y = Perlin.Noise(t0.x / width * 5 + perlinXValue, t0.z / width * 5 + perlinYValue) * scale; t1.y = Perlin.Noise(t1.x / width * 5 + perlinXValue, t1.z / width * 5 + perlinYValue) * scale; t2.y = Perlin.Noise(t2.x / width * 5 + perlinXValue, t2.z / width * 5 + perlinYValue) * scale; t3.y = Perlin.Noise(t3.x / width * 5 + perlinXValue, t3.z / width * 5 + perlinYValue) * scale; // Top square meshCreator.BuildTriangle(t0, t1, t2); meshCreator.BuildTriangle(t0, t2, t3); }
private void Start() { MeshFilter meshFilter = this.GetComponent <MeshFilter>(); MeshCreator mc = new MeshCreator(); // one submesh for each face Vector3 cubeSize = size * 0.5f; // top of the cube // t0 is top left point Vector3 t0 = new Vector3(cubeSize.x, cubeSize.y, -cubeSize.z); Vector3 t1 = new Vector3(-cubeSize.x, cubeSize.y, -cubeSize.z); Vector3 t2 = new Vector3(-cubeSize.x, cubeSize.y, cubeSize.z); Vector3 t3 = new Vector3(cubeSize.x, cubeSize.y, cubeSize.z); // bottom of the cube Vector3 b0 = new Vector3(cubeSize.x, -cubeSize.y, -cubeSize.z); Vector3 b1 = new Vector3(-cubeSize.x, -cubeSize.y, -cubeSize.z); Vector3 b2 = new Vector3(-cubeSize.x, -cubeSize.y, cubeSize.z); Vector3 b3 = new Vector3(cubeSize.x, -cubeSize.y, cubeSize.z); // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square mc.BuildTriangle(b2, b1, b0); mc.BuildTriangle(b3, b2, b0); // Back square mc.BuildTriangle(b0, t1, t0); mc.BuildTriangle(b0, b1, t1); mc.BuildTriangle(b1, t2, t1); mc.BuildTriangle(b1, b2, t2); mc.BuildTriangle(b2, t3, t2); mc.BuildTriangle(b2, b3, t3); mc.BuildTriangle(b3, t0, t3); mc.BuildTriangle(b3, b0, t0); meshFilter.mesh = mc.CreateMesh(); }
// Update is called once per frame void Update() { mc.ListClear(); //if (factor > 1) { inc = false; } //if (factor < -1) { inc = true; } /*if (inc) {*/ factor += Time.deltaTime * 0.4f; keyTimer += Time.deltaTime; //} //else if (!inc) { factor -= 0.005f; } for (int i = 0; i < 40; ++i) { for (int j = 0; j < 40; ++j) { cubeSize = size * 0.5f; key(i, j); if (!MusicOn) { NoiseAnim(i, j); this.GetComponent <AudioSource>().enabled = false; } if (MusicOn) { this.GetComponent <AudioSource>().enabled = true; SoundAnim(i, j); } // top of the cube // t0 is top left point Vector3 t0 = new Vector3(cubeSize.x + size.x * i * 1.2f, coordy, -cubeSize.z + size.z * j * 1.2f); Vector3 t1 = new Vector3(-cubeSize.x + size.x * i * 1.2f, coordy, -cubeSize.z + size.z * j * 1.2f); Vector3 t2 = new Vector3(-cubeSize.x + size.x * i * 1.2f, coordy, cubeSize.z + size.z * j * 1.2f); Vector3 t3 = new Vector3(cubeSize.x + size.x * i * 1.2f, coordy, cubeSize.z + size.z * j * 1.2f); // bottom of the cube Vector3 b0 = new Vector3(cubeSize.x + size.x * i * 1.2f, -cubeSize.y, -cubeSize.z + size.z * j * 1.2f); Vector3 b1 = new Vector3(-cubeSize.x + size.x * i * 1.2f, -cubeSize.y, -cubeSize.z + size.z * j * 1.2f); Vector3 b2 = new Vector3(-cubeSize.x + size.x * i * 1.2f, -cubeSize.y, cubeSize.z + size.z * j * 1.2f); Vector3 b3 = new Vector3(cubeSize.x + size.x * i * 1.2f, -cubeSize.y, cubeSize.z + size.z * j * 1.2f); //Debug.Log(t0); //Debug.Log(Perlin.Noise(t0)); //Debug.Log(Perlin.Noise(100, 100, Random.Range(0, 1000) * 0.1f)); // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square mc.BuildTriangle(b2, b1, b0); mc.BuildTriangle(b3, b2, b0); // Back square mc.BuildTriangle(b0, t1, t0); mc.BuildTriangle(b0, b1, t1); mc.BuildTriangle(b1, t2, t1); mc.BuildTriangle(b1, b2, t2); mc.BuildTriangle(b2, t3, t2); mc.BuildTriangle(b2, b3, t3); mc.BuildTriangle(b3, t0, t3); mc.BuildTriangle(b3, b0, t0); } } if (coordy > 20f) { GameObject instR = Instantiate(ring, new Vector3(-50, coordy, 0), Quaternion.identity); Destroy(instR, 5f); if (coordy > 30f) { GameObject instF = Instantiate(firework, new Vector3(-50, coordy, 0), Quaternion.identity); Destroy(instF, 10f); } } meshFilter.mesh = mc.CreateMesh(); }
void CreateCube(Vector3 center, float height) { Vector3 cubeSize = size * 0.5f; // top of the cube // t0 is top left point Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + height, center.z - cubeSize.z); Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + height, center.z - cubeSize.z); Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + height, center.z + cubeSize.z); Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + height, center.z + cubeSize.z); // bottom of the cube Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square mc.BuildTriangle(b2, b1, b0); mc.BuildTriangle(b3, b2, b0); // Back square mc.BuildTriangle(b0, t1, t0); mc.BuildTriangle(b0, b1, t1); mc.BuildTriangle(b1, t2, t1); mc.BuildTriangle(b1, b2, t2); mc.BuildTriangle(b2, t3, t2); mc.BuildTriangle(b2, b3, t3); mc.BuildTriangle(b3, t0, t3); mc.BuildTriangle(b3, b0, t0); }
void CreateCube(Vector3 center) { Vector3 cubeSize = size * 0.5f; // Call the noise function //float offsetY = Perlin.Noise(center.x / 20, center.y / 20, center.z / 20); //float offsetY = Perlin.Noise(Random.Range(.1f,.5f)/15, Random.Range(.1f, .5f)/15, Random.Range(.1f, .5f)/15); float offsetY = Perlin.Noise(center.x / 20 + Random.Range(0.1f, 10f), center.y / 20 + Random.Range(0.1f, 10f), center.z / 20 + Random.Range(0.1f, 10f)); //float offsetY = Perlin.Noise((center.x + Random.Range(0.1f, 10f))/20, (center.y / 20 + Random.Range(0.1f, 10f))/20, (center.z / 20 + Random.Range(0.1f, 10f))/20); //float offsetY = Perlin.Noise(center.x, center.y, center.z); //float offsetZ = Perlin.Noise(center.x, center.y, center.z); Debug.Log("this is" + offsetY); if (partSpawn) { GameObject deatheffect = (GameObject)Instantiate(particleDeathEffect, center, Quaternion.identity); Destroy(deatheffect, 5f); } // top of the cube // t0 is top left point Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + offsetY, center.z - cubeSize.z); Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + offsetY, center.z - cubeSize.z); Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + offsetY, center.z + cubeSize.z); Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + offsetY, center.z + cubeSize.z); // bottom of the cube Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square mc.BuildTriangle(b2, b1, b0); mc.BuildTriangle(b3, b2, b0); // Back square mc.BuildTriangle(b0, t1, t0); mc.BuildTriangle(b0, b1, t1); mc.BuildTriangle(b1, t2, t1); mc.BuildTriangle(b1, b2, t2); mc.BuildTriangle(b2, t3, t2); mc.BuildTriangle(b2, b3, t3); mc.BuildTriangle(b3, t0, t3); mc.BuildTriangle(b3, b0, t0); }
void CreateCube(Vector3 center, float x, float z, int row, int col) { Vector3 cubeSize = size * sizeMultiplier; float heightInc = 0; if (!canBeAnimated) { heightInc = .9f * Perlin.Noise(x / 10, z / 10); } else { heightInc = .9f * Perlin.Noise(x + 1, (z + 1) * Time.realtimeSinceStartup / animateSpeed); } // heightInc = Mathf.Clamp(Perlin.Noise(x , z * Time.realtimeSinceStartup), 0.05f, 0.2f); if (animateVFX) { if (heightInc > 0.3f) { if (vfxList[row, col].GetComponent <ParticleSystem>()) { vfxList[row, col].GetComponent <ParticleSystem>().Play(); vfxList[row, col].GetComponent <ParticleSystem>().startSpeed = heightInc * 10; } } else { if (vfxList[row, col].GetComponent <ParticleSystem>()) { vfxList[row, col].GetComponent <ParticleSystem>().Stop(); } } } // top of the cube // t0 is top left point Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + heightInc * oriHeight, center.z - cubeSize.z); Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + heightInc * oriHeight, center.z - cubeSize.z); Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + heightInc * oriHeight, center.z + cubeSize.z); Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + heightInc * oriHeight, center.z + cubeSize.z); // bottom of the cube Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); if (center.y + heightInc * oriHeight < 0) { t0 = new Vector3(center.x + cubeSize.x, center.y, center.z - cubeSize.z); t1 = new Vector3(center.x - cubeSize.x, center.y, center.z - cubeSize.z); t2 = new Vector3(center.x - cubeSize.x, center.y, center.z + cubeSize.z); t3 = new Vector3(center.x + cubeSize.x, center.y, center.z + cubeSize.z); b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y + heightInc * oriHeight, center.z - cubeSize.z); b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y + heightInc * oriHeight, center.z - cubeSize.z); b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y + heightInc * oriHeight, center.z + cubeSize.z); b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y + heightInc * oriHeight, center.z + cubeSize.z); } // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square mc.BuildTriangle(b2, b1, b0); mc.BuildTriangle(b3, b2, b0); // Back square mc.BuildTriangle(b0, t1, t0); mc.BuildTriangle(b0, b1, t1); mc.BuildTriangle(b1, t2, t1); mc.BuildTriangle(b1, b2, t2); mc.BuildTriangle(b2, t3, t2); mc.BuildTriangle(b2, b3, t3); mc.BuildTriangle(b3, t0, t3); mc.BuildTriangle(b3, b0, t0); }
private void FixedUpdate() { timer += Time.deltaTime * timeMod; if (timer > 255) { timer = 0; } MeshFilter meshFilter = this.GetComponent <MeshFilter>(); // one submesh for each face MeshCreator mc = new MeshCreator(); Vector3 cubeSize = size * 0.5f; float noiseValueT0 = Perlin.Noise((pos.x + cubeSize.x) / posMod, (pos.y - cubeSize.z) / posMod, timer); float noiseValueT1 = Perlin.Noise((pos.x - cubeSize.x) / posMod, (pos.y - cubeSize.z) / posMod, timer); float noiseValueT2 = Perlin.Noise((pos.x - cubeSize.x) / posMod, (pos.y + cubeSize.z) / posMod, timer); float noiseValueT3 = Perlin.Noise((pos.x + cubeSize.x) / posMod, (pos.y + cubeSize.z) / posMod, timer); //float noiseValueT0 = Perlin.Noise((pos.x + cubeSize.x) * posMod, (pos.y - cubeSize.z) * posMod, timer); //float noiseValueT1 = Perlin.Noise((pos.x - cubeSize.x) * posMod, (pos.y - cubeSize.z) * posMod, timer); //float noiseValueT2 = Perlin.Noise((pos.x - cubeSize.x) * posMod, (pos.y + cubeSize.z) * posMod, timer); //float noiseValueT3 = Perlin.Noise((pos.x + cubeSize.x) * posMod, (pos.y + cubeSize.z) * posMod, timer); // top of the cube // t0 is top left point Vector3 t0 = new Vector3(cubeSize.x, cubeSize.y + modifier * noiseValueT0, -cubeSize.z); Vector3 t1 = new Vector3(-cubeSize.x, cubeSize.y + modifier * noiseValueT1, -cubeSize.z); Vector3 t2 = new Vector3(-cubeSize.x, cubeSize.y + modifier * noiseValueT2, cubeSize.z); Vector3 t3 = new Vector3(cubeSize.x, cubeSize.y + modifier * noiseValueT3, cubeSize.z); // bottom of the cube Vector3 b0 = new Vector3(cubeSize.x, -cubeSize.y, -cubeSize.z); Vector3 b1 = new Vector3(-cubeSize.x, -cubeSize.y, -cubeSize.z); Vector3 b2 = new Vector3(-cubeSize.x, -cubeSize.y, cubeSize.z); Vector3 b3 = new Vector3(cubeSize.x, -cubeSize.y, cubeSize.z); // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square mc.BuildTriangle(b2, b1, b0); mc.BuildTriangle(b3, b2, b0); // Back square mc.BuildTriangle(b0, t1, t0); mc.BuildTriangle(b0, b1, t1); mc.BuildTriangle(b1, t2, t1); mc.BuildTriangle(b1, b2, t2); mc.BuildTriangle(b2, t3, t2); mc.BuildTriangle(b2, b3, t3); mc.BuildTriangle(b3, t0, t3); mc.BuildTriangle(b3, b0, t0); meshFilter.mesh = mc.CreateMesh(); }
// Update is called once per frame void Update() { float[] spectrum = new float[256]; AudioListener.GetSpectrumData(spectrum, 0, FFTWindow.Rectangular); MeshFilter meshFilter = this.GetComponent <MeshFilter>(); Mesh mesh = this.GetComponent <MeshFilter>().mesh; Vector3[] vertices = mesh.vertices; // one submesh for each face Vector3 center = new Vector3(0, 0, 0); mc.Clear(); // Clear internal lists and mesh if (Input.GetKeyDown(KeyCode.UpArrow)) { resize++; } if (Input.GetKeyDown(KeyCode.DownArrow) && resize > 1.0f) { resize--; } if (Input.GetKeyDown(KeyCode.RightArrow)) { distance += 0.1f; } if (Input.GetKeyDown(KeyCode.LeftArrow) && distance > 1.2f) { distance -= 0.1f; } if (Input.GetKeyDown(KeyCode.A)) { for (int i = 0; i < vertices.Length; i++) { this.GetComponent <MeshRenderer>().material.color = Color.Lerp(Color.yellow, Color.blue, vertices[i].y); } } for (int j = 0; j < 20; j++) { for (int i = 0; i < 20; i++) { Vector3 cubeSize = size * 0.5f; //float timepass = 0; float timepass = Time.deltaTime * 20f; //timepass +=Time.deltaTime* 10.0f; float noisy = cubeSize.y + Perlin.Noise(cubeSize.x + size.x * i * 0.12f * spectrum[i] * 100.0f + timepass, 0, -cubeSize.z + size.z * j * 0.12f * spectrum[i] * 100.0f + timepass); //float noisy = cubeSize.y + Perlin.Noise(cubeSize.x + size.x * i * 0.12f + timepass, 0, -cubeSize.z + size.z * j * 0.12f + timepass); // top of the cube // t0 is top left point Vector3 t0 = new Vector3(cubeSize.x + size.x * i * distance, noisy * resize, -cubeSize.z + size.z * j * distance); Vector3 t1 = new Vector3(-cubeSize.x + size.x * i * distance, noisy * resize, -cubeSize.z + size.z * j * distance); Vector3 t2 = new Vector3(-cubeSize.x + size.x * i * distance, noisy * resize, cubeSize.z + size.z * j * distance); Vector3 t3 = new Vector3(cubeSize.x + size.x * i * distance, noisy * resize, cubeSize.z + size.z * j * distance); // bottom of the cube Vector3 b0 = new Vector3(cubeSize.x + size.x * i * distance, -cubeSize.y, -cubeSize.z + size.z * j * distance); Vector3 b1 = new Vector3(-cubeSize.x + size.x * i * distance, -cubeSize.y, -cubeSize.z + size.z * j * distance); Vector3 b2 = new Vector3(-cubeSize.x + size.x * i * distance, -cubeSize.y, cubeSize.z + size.z * j * distance); Vector3 b3 = new Vector3(cubeSize.x + size.x * i * distance, -cubeSize.y, cubeSize.z + size.z * j * distance); // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square mc.BuildTriangle(b2, b1, b0); mc.BuildTriangle(b3, b2, b0); // Back square mc.BuildTriangle(b0, t1, t0); mc.BuildTriangle(b0, b1, t1); mc.BuildTriangle(b1, t2, t1); mc.BuildTriangle(b1, b2, t2); mc.BuildTriangle(b2, t3, t2); mc.BuildTriangle(b2, b3, t3); mc.BuildTriangle(b3, t0, t3); mc.BuildTriangle(b3, b0, t0); meshFilter.mesh = mc.CreateMesh(); if (noisy > 1.1f) { Instantiate(particlesystem, new Vector3(i * 2.0F, noisy * resize * 2, 0), Quaternion.identity); } } } }
private void Update() { center = transform.position; MeshFilter meshFilter = this.GetComponent <MeshFilter>(); MeshCreator mc = new MeshCreator(center); timer += Time.deltaTime * timeMod; if (timer > timeMod * 5) { usingNoise = true; } if (timer > 255) { timer = 0; } float noiseValue; float t = (radius + Mathf.Sqrt(5f)) / 2f; List <Vector3> verts = new List <Vector3>(); verts.Add(new Vector3(-radius, t, 0)); verts.Add(new Vector3(radius, t, 0)); verts.Add(new Vector3(-radius, -t, 0)); verts.Add(new Vector3(radius, -t, 0)); verts.Add(new Vector3(0, -radius, t)); verts.Add(new Vector3(0, radius, t)); verts.Add(new Vector3(0, -radius, -t)); verts.Add(new Vector3(0, radius, -t)); verts.Add(new Vector3(t, 0, -radius)); verts.Add(new Vector3(t, 0, radius)); verts.Add(new Vector3(-t, 0, -radius)); verts.Add(new Vector3(-t, 0, radius)); if (usingNoise) { for (int i = 0; i < verts.Count; i++) { noiseValue = Perlin.Noise(verts[i].x, verts[i].y, timer); verts[i] += (center - verts[i]).normalized * noiseValue * scaler; } } mc.BuildTriangle(verts[5], verts[11], verts[0]); mc.BuildTriangle(verts[1], verts[5], verts[0]); mc.BuildTriangle(verts[7], verts[1], verts[0]); mc.BuildTriangle(verts[10], verts[7], verts[0]); mc.BuildTriangle(verts[11], verts[10], verts[0]); mc.BuildTriangle(verts[9], verts[5], verts[1]); mc.BuildTriangle(verts[4], verts[11], verts[5]); mc.BuildTriangle(verts[2], verts[10], verts[11]); mc.BuildTriangle(verts[6], verts[7], verts[10]); mc.BuildTriangle(verts[8], verts[1], verts[7]); mc.BuildTriangle(verts[4], verts[9], verts[3]); mc.BuildTriangle(verts[2], verts[4], verts[3]); mc.BuildTriangle(verts[6], verts[2], verts[3]); mc.BuildTriangle(verts[8], verts[6], verts[3]); mc.BuildTriangle(verts[9], verts[8], verts[3]); mc.BuildTriangle(verts[5], verts[9], verts[4]); mc.BuildTriangle(verts[11], verts[4], verts[2]); mc.BuildTriangle(verts[10], verts[2], verts[6]); mc.BuildTriangle(verts[7], verts[6], verts[8]); mc.BuildTriangle(verts[1], verts[8], verts[9]); meshFilter.mesh = mc.CreateMesh(); }
void CreateCube(Vector3 center, int i) { Vector3 cubeSize = size * 0.15f; float heightInc = 0; if (m_audioTester) { heightInc = 10 * Mathf.Abs(Perlin.Noise((i + 1) * m_audioTester.clipLoudness / 100)); } // top of the cube // t0 is top left point Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + heightInc, center.z - cubeSize.z); Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + heightInc, center.z - cubeSize.z); Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + heightInc, center.z + cubeSize.z); Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + heightInc, center.z + cubeSize.z); // bottom of the cube Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square mc.BuildTriangle(b2, b1, b0); mc.BuildTriangle(b3, b2, b0); // Back square mc.BuildTriangle(b0, t1, t0); mc.BuildTriangle(b0, b1, t1); mc.BuildTriangle(b1, t2, t1); mc.BuildTriangle(b1, b2, t2); mc.BuildTriangle(b2, t3, t2); mc.BuildTriangle(b2, b3, t3); mc.BuildTriangle(b3, t0, t3); mc.BuildTriangle(b3, b0, t0); }
void Update() { if (Input.GetKeyDown(KeyCode.UpArrow)) { scale += 4; Debug.Log("Scale: " + scale); } if (Input.GetKeyDown(KeyCode.DownArrow)) { scale -= 4; Debug.Log("Scale: " + scale); } mc.cleanUp(); timer += Time.deltaTime / 2; if (timer > 255) { timer = 0; } MeshFilter meshFilter = this.GetComponent <MeshFilter>(); MeshCollider meshCollider = this.GetComponent <MeshCollider>(); // one submesh for each face Vector3 cubeSize = size * 0.5f; // top of the cube // t0 is top left point float perlinX1 = (transform.position.x + cubeSize.x) / scale; float perlinX2 = (transform.position.x - cubeSize.x) / scale; float perlinY1 = (transform.position.z - cubeSize.z) / scale; float perlinY2 = (transform.position.z + cubeSize.z) / scale; //Calculate each top vertex height individually float height1 = Perlin.Noise(perlinX1, perlinY1, timer) * 1.2f + 0.9f; float height2 = Perlin.Noise(perlinX2, perlinY1, timer) * 1.2f + 0.9f; float height3 = Perlin.Noise(perlinX2, perlinY2, timer) * 1.2f + 0.9f; float height4 = Perlin.Noise(perlinX1, perlinY2, timer) * 1.2f + 0.9f; Vector3 position = GetComponentInChildren <ParticleSystem>().GetComponentInParent <Transform>().position; GetComponentInChildren <ParticleSystem>().GetComponentInParent <Transform>().position = new Vector3(position.x, ((height1 + height2 + height3 + height4) / 4f), position.z); if ((((height1 + height2 + height3 + height4) / 4f) > 1.2f) && !GetComponentInChildren <ParticleSystem>().isPlaying) { GetComponentInChildren <ParticleSystem>().Play(); } Vector3 t0 = new Vector3(cubeSize.x, height1, -cubeSize.z); Vector3 t1 = new Vector3(-cubeSize.x, height2, -cubeSize.z); Vector3 t2 = new Vector3(-cubeSize.x, height3, cubeSize.z); Vector3 t3 = new Vector3(cubeSize.x, height4, cubeSize.z); // bottom of the cube Vector3 b0 = new Vector3(cubeSize.x, -cubeSize.y, -cubeSize.z); Vector3 b1 = new Vector3(-cubeSize.x, -cubeSize.y, -cubeSize.z); Vector3 b2 = new Vector3(-cubeSize.x, -cubeSize.y, cubeSize.z); Vector3 b3 = new Vector3(cubeSize.x, -cubeSize.y, cubeSize.z); // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square mc.BuildTriangle(b2, b1, b0); mc.BuildTriangle(b3, b2, b0); // Back square mc.BuildTriangle(b0, t1, t0); mc.BuildTriangle(b0, b1, t1); mc.BuildTriangle(b1, t2, t1); mc.BuildTriangle(b1, b2, t2); mc.BuildTriangle(b2, t3, t2); mc.BuildTriangle(b2, b3, t3); mc.BuildTriangle(b3, t0, t3); mc.BuildTriangle(b3, b0, t0); meshFilter.mesh.Clear(); Destroy(oldMesh); oldMesh = mc.CreateMesh(); meshCollider.sharedMesh = oldMesh; meshFilter.mesh = oldMesh; }
void Update() { mc.Clear(); Vector3 cubeSize = size * 0.5f; // top of the cube Vector3 t0 = new Vector3(cubeSize.x, cubeSize.y, -cubeSize.z); Vector3 t1 = new Vector3(-cubeSize.x, cubeSize.y, -cubeSize.z); Vector3 t2 = new Vector3(-cubeSize.x, cubeSize.y, cubeSize.z); Vector3 t3 = new Vector3(cubeSize.x, cubeSize.y, cubeSize.z); // bottom of the cube Vector3 b0 = new Vector3(cubeSize.x, -cubeSize.y, -cubeSize.z); Vector3 b1 = new Vector3(-cubeSize.x, -cubeSize.y, -cubeSize.z); Vector3 b2 = new Vector3(-cubeSize.x, -cubeSize.y, cubeSize.z); Vector3 b3 = new Vector3(cubeSize.x, -cubeSize.y, cubeSize.z); // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square mc.BuildTriangle(b2, b1, b0); mc.BuildTriangle(b3, b2, b0); // Back square mc.BuildTriangle(b0, t1, t0); mc.BuildTriangle(b0, b1, t1); mc.BuildTriangle(b1, t2, t1); mc.BuildTriangle(b1, b2, t2); mc.BuildTriangle(b2, t3, t2); mc.BuildTriangle(b2, b3, t3); mc.BuildTriangle(b3, t0, t3); mc.BuildTriangle(b3, b0, t0); meshFilter.mesh = mc.CreateMesh(); }
void CreateCube(Vector3 center, float x, float z, int row, int col) { Vector3 cubeSize = size * sizeMultiplier; float heightInc = 0; heightInc = .9f * bumpiness * Perlin.Noise((x + 1) / scale, (z + 1) / scale); if (heightInc > 3) { //for (int i = -3; i < 3; i++) //{ // for (int j = -3; j < 3; j++) // { // CreateCube(center, x, z, i, j); // } //} } // top of the cube // t0 is top left point Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + heightInc * bumpiness, center.z - cubeSize.z); Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + heightInc * bumpiness, center.z - cubeSize.z); Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + heightInc * bumpiness, center.z + cubeSize.z); Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + heightInc * bumpiness, center.z + cubeSize.z); // bottom of the cube Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); if (center.y + heightInc * bumpiness < 0) { t0 = new Vector3(center.x + cubeSize.x, center.y, center.z - cubeSize.z); t1 = new Vector3(center.x - cubeSize.x, center.y, center.z - cubeSize.z); t2 = new Vector3(center.x - cubeSize.x, center.y, center.z + cubeSize.z); t3 = new Vector3(center.x + cubeSize.x, center.y, center.z + cubeSize.z); b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y + heightInc * bumpiness, center.z - cubeSize.z); b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y + heightInc * bumpiness, center.z - cubeSize.z); b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y + heightInc * bumpiness, center.z + cubeSize.z); b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y + heightInc * bumpiness, center.z + cubeSize.z); } // Top square mc.BuildTriangle(t0, t1, t2); mc.BuildTriangle(t0, t2, t3); // Bottom square //mc.BuildTriangle(b2, b1, b0); //mc.BuildTriangle(b3, b2, b0); //// Back square //mc.BuildTriangle(b0, t1, t0); //mc.BuildTriangle(b0, b1, t1); //mc.BuildTriangle(b1, t2, t1); //mc.BuildTriangle(b1, b2, t2); //mc.BuildTriangle(b2, t3, t2); //mc.BuildTriangle(b2, b3, t3); //mc.BuildTriangle(b3, t0, t3); //mc.BuildTriangle(b3, b0, t0); }
protected void CreateCube(Vector3 center, float time) { Vector3 cubeSize = Vector3.one * 0.5f; float noise = GenerateNoise(); // top of the cube // t0 is top left point Vector3 t0 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + noise, center.z - cubeSize.z); Vector3 t1 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + noise, center.z - cubeSize.z); Vector3 t2 = new Vector3(center.x - cubeSize.x, center.y + cubeSize.y + noise, center.z + cubeSize.z); Vector3 t3 = new Vector3(center.x + cubeSize.x, center.y + cubeSize.y + noise, center.z + cubeSize.z); // bottom of the cube Vector3 b0 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b1 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z - cubeSize.z); Vector3 b2 = new Vector3(center.x - cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); Vector3 b3 = new Vector3(center.x + cubeSize.x, center.y - cubeSize.y, center.z + cubeSize.z); // Top square meshCreator.BuildTriangle(t0, t1, t2); meshCreator.BuildTriangle(t0, t2, t3); // Bottom square meshCreator.BuildTriangle(b2, b1, b0); meshCreator.BuildTriangle(b3, b2, b0); // Back square meshCreator.BuildTriangle(b0, t1, t0); meshCreator.BuildTriangle(b0, b1, t1); meshCreator.BuildTriangle(b1, t2, t1); meshCreator.BuildTriangle(b1, b2, t2); meshCreator.BuildTriangle(b2, t3, t2); meshCreator.BuildTriangle(b2, b3, t3); meshCreator.BuildTriangle(b3, t0, t3); meshCreator.BuildTriangle(b3, b0, t0); }