Esempio n. 1
0
        /// <summary>
        /// Génère une heighmap à partir d'un bruit Ridged Multifratcal.
        /// Version parrallélisée.
        /// </summary>
        /// <param name="size"></param>
        /// <returns></returns>
        public static unsafe float[,] GenerateMultiNoiseSleep(int size, NoiseParameters repartitionNoiseParams,
                                                              NoiseParameters noiseHighParams,
                                                              NoiseParameters noiseLowParams)
        {
            Random rand = new Random();

            float[,] heightmap = new float[size, size];

            // Création des bruits.
            NoiseBase repartitionNoise = repartitionNoiseParams.CreateNoise();
            NoiseBase noiseHigh        = noiseHighParams.CreateNoise();
            NoiseBase noiseLow         = noiseLowParams.CreateNoise();


            // Donne une liste de tâches à effectuer pour chaque core.
            int taskSize  = size;
            int taskStart = 0;
            int taskEnd   = taskSize;

            for (int x = taskStart; x < taskEnd; x++)
            {
                for (int y = 0; y < size; y++)
                {
                    float sx = LinearInterp(repartitionNoiseParams.NoiseStart.X, repartitionNoiseParams.NoiseEnd.X, x / (float)(size - 1));
                    float sy = LinearInterp(repartitionNoiseParams.NoiseStart.Y, repartitionNoiseParams.NoiseEnd.Y, y / (float)(size - 1));

                    // Obtention des valeurs des bruits.
                    float repartition = repartitionNoise.GetValue(sx, sy, 0);
                    float valueHigh   = noiseHigh.GetValue(sx, sy, 0);
                    float valueLow    = noiseLow.GetValue(sx, sy, 0);

                    // Interpolation linéaire entre value low et value high de coefficient donné par le bruit de
                    // répartition.
                    float value = (float)Math.Log(Math.Max(0.8, 1 + valueLow)) * 5 + valueHigh * 25 + repartition * 3;
                    heightmap[x, y] = value;
                }
            }

            return(heightmap);
        }
Esempio n. 2
0
        /// <summary>
        /// Génère une heighmap à partir d'un bruit Ridged Multifratcal.
        /// </summary>
        /// <param name="size"></param>
        /// <returns></returns>
        public static float[,] Generate(int size, NoiseParameters parameters)
        {
            NoiseBase noise = parameters.CreateNoise();
            Random    rand  = new Random();

            float[,] heightmap = new float[size, size];


            for (int x = 0; x < size; x++)
            {
                for (int y = 0; y < size; y++)
                {
                    float value = (float)noise.GetValue(
                        LinearInterp(parameters.NoiseStart.X, parameters.NoiseEnd.X, x / (float)(size - 1)),
                        LinearInterp(parameters.NoiseStart.Y, parameters.NoiseEnd.Y, y / (float)(size - 1)),
                        0.0f);
                    heightmap[x, y] = value;
                }
            }

            return(heightmap);
        }
Esempio n. 3
0
        /// <summary>
        /// Génère une heighmap à partir d'un bruit Ridged Multifratcal.
        /// Version parrallélisée.
        /// </summary>
        /// <param name="size"></param>
        /// <returns></returns>
        public static unsafe float[,] GenerateMultiNoiseSleep(int size, NoiseParameters repartitionNoiseParams,
            NoiseParameters noiseHighParams,
            NoiseParameters noiseLowParams)
        {
            Random rand = new Random();
            float[,] heightmap = new float[size, size];

            // Création des bruits.
            NoiseBase repartitionNoise = repartitionNoiseParams.CreateNoise();
            NoiseBase noiseHigh = noiseHighParams.CreateNoise();
            NoiseBase noiseLow = noiseLowParams.CreateNoise();

            // Donne une liste de tâches à effectuer pour chaque core.
            int taskSize = size;
            int taskStart = 0;
            int taskEnd = taskSize;

            for (int x = taskStart; x < taskEnd; x++)
            {
                for (int y = 0; y < size; y++)
                {
                    float sx = LinearInterp(repartitionNoiseParams.NoiseStart.X, repartitionNoiseParams.NoiseEnd.X, x / (float)(size - 1));
                    float sy = LinearInterp(repartitionNoiseParams.NoiseStart.Y, repartitionNoiseParams.NoiseEnd.Y, y / (float)(size - 1));

                    // Obtention des valeurs des bruits.
                    float repartition = repartitionNoise.GetValue(sx, sy, 0);
                    float valueHigh = noiseHigh.GetValue(sx, sy, 0);
                    float valueLow = noiseLow.GetValue(sx, sy, 0);

                    // Interpolation linéaire entre value low et value high de coefficient donné par le bruit de
                    // répartition.
                    float value = (float)Math.Log(Math.Max(0.8,  1 + valueLow)) * 5 + valueHigh * 25 + repartition*3;
                    heightmap[x, y] = value;

                }
            }

            return heightmap;
        }
Esempio n. 4
0
        /// <summary>
        /// Génère une heighmap à partir d'un bruit Ridged Multifratcal.
        /// </summary>
        /// <param name="size"></param>
        /// <returns></returns>
        public static float[,] Generate(int size, NoiseParameters parameters)
        {
            NoiseBase noise = parameters.CreateNoise();
            Random rand = new Random();
            float[,] heightmap = new float[size,size];

            for (int x = 0; x < size; x++)
            {
                for (int y = 0; y < size; y++)
                {

                    float value = (float)noise.GetValue(
                        LinearInterp(parameters.NoiseStart.X, parameters.NoiseEnd.X, x / (float)(size-1)),
                        LinearInterp(parameters.NoiseStart.Y, parameters.NoiseEnd.Y, y / (float)(size-1)),
                        0.0f);
                    heightmap[x, y] = value;
                }
            }

            return heightmap;
        }