Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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);
        }