public void NoiseTestSimpleTerrain() { XNAGame game = new XNAGame(); PerlinNoiseGenerater noise; noise = new PerlinNoiseGenerater(); float factor = 0.1f; float scale = 10f; List <Vector3> positions = new List <Vector3>(); List <Color> colors = new List <Color>(); int width = 100; int height = 100; float verticesPerMeter = 1; int verticesX = (int)(width * verticesPerMeter); int verticesY = (int)(height * verticesPerMeter); SimpleTerrain terrain; noise.NumberOfOctaves = 8; noise.persistance = 0.2f; for (int i = 0; i < verticesX; i++) { for (int j = 0; j < verticesY; j++) { positions.Add(new Vector3(i / verticesPerMeter, noise.interpolatedNoise((i / verticesPerMeter) * 0.1f, (j / verticesPerMeter) * 0.2f) * scale, j / verticesPerMeter)); colors.Add(new Color((byte)(150 * noise.GetPerlineNoise(i, j)), (byte)(100 + 70 * noise.GetPerlineNoise(i + 1, j + 1)), (byte)(140 * noise.GetPerlineNoise(i, j + 2)))); } } terrain = new SimpleTerrain(game, positions, colors, verticesX, verticesY); game.InitializeEvent += delegate { terrain.CreateRenderData(); }; bool changed = false; game.UpdateEvent += delegate { if (game.Keyboard.IsKeyPressed(Microsoft.Xna.Framework.Input.Keys.O)) { noise.NumberOfOctaves++; changed = true; } if (game.Keyboard.IsKeyPressed(Microsoft.Xna.Framework.Input.Keys.P)) { noise.persistance *= 0.1f; changed = true; } if (game.Keyboard.IsKeyPressed(Microsoft.Xna.Framework.Input.Keys.F)) { factor *= 0.1f; changed = true; } if (changed) { for (int i = 0; i < verticesX; i++) { for (int j = 0; j < verticesY; j++) { positions.Add(new Vector3(i / verticesPerMeter, noise.GetPerlineNoise((i / verticesPerMeter) * factor, (j / verticesPerMeter) * factor) * scale, j / verticesPerMeter)); colors.Add(new Color((byte)(150 * noise.GetPerlineNoise(i, j)), (byte)(100 + 70 * noise.GetPerlineNoise(i + 1, j + 1)), (byte)(140 * noise.GetPerlineNoise(i, j + 2)))); } } terrain = new SimpleTerrain(game, positions, colors, verticesX, verticesY); terrain.CreateRenderData(); changed = false; } }; game.DrawEvent += delegate { terrain.Render(); }; game.Run(); }
private Color smoothColor(Color colorA, Color colorB, float distribution, float count) { Color color = new Color(Vector4.Lerp(colorA.ToVector4(), colorB.ToVector4(), distribution * noise.interpolatedNoise(count, 1))); return(color); return(Color.White); }