Ejemplo n.º 1
0
 private void GenerateBiomes()
 {
     _northGreen = Curves.GenerateCurve(XSize, XSize / 2 - _greenEdge, GreenRoughness);
     _southGreen = Curves.GenerateCurve(XSize, _greenEdge, GreenRoughness);
     _northSnow  = Curves.GenerateCurve(XSize, XSize / 2 - _snowEdge, SnowRoughness);
     _southSnow  = Curves.GenerateCurve(XSize, _snowEdge, SnowRoughness);
 }
Ejemplo n.º 2
0
        protected override Color[] GenerateTextureColors()
        {
            Int32 ringsCount = (Int32)((OuterRadius - InnerRadius) * YSize / 2);

            var transparencyMap = Array.ConvertAll(
                Curves.GenerateCurve(ringsCount, Random.Range(0, 255), _curvesRoughness, Random.Range(0, 255)),
                dot => (Single)dot / 255
                );         //Определяет спектр прозрачности

            var colorMap = Array.ConvertAll(
                Curves.GenerateCurve(ringsCount, Random.Range(0, 255), _curvesRoughness, Random.Range(0, 255)),
                dot => (Single)dot / 255
                );         //Определяет спектр цветов

            var baseColors = RandomRingsColors();
            var rings      = new Color[ringsCount];

            for (Int32 i = 0; i < rings.Length; i++)
            {
                rings[i]   = Color.Lerp(baseColors[0], baseColors[1], colorMap[i]);
                rings[i].a = transparencyMap[i];
            }

            var center = new Vector2(YSize / 2, YSize / 2);
            var colors = new Color[YSize * YSize];

            Int32 counter = 0;

            for (Int32 x = 0; x < YSize; x++)
            {
                for (Int32 y = 0; y < XSize; y++)
                {
                    var    posit = new Vector2(x, y);
                    Single dist  = Vector2.Distance(posit, center);
                    colors[counter] = dist <OuterRadius * YSize / 2 && dist> InnerRadius * YSize / 2
                                        ? rings[(Int32)(dist * 2 * ringsCount / YSize)]
                                        : new Color(0, 0, 0, 0);

                    counter++;
                }
            }

            return(colors);
        }
Ejemplo n.º 3
0
 private void GenerateSnowCorners()
 {
     _northSnow = Curves.GenerateCurve(XSize, XSize / 2 - _snowEdge, _snowRoughness);
     _southSnow = Curves.GenerateCurve(XSize, _snowEdge, _snowRoughness);
 }
Ejemplo n.º 4
0
        /// <summary>
        ///    Генерирует текстуру газового гиганта с заданными параметрами
        /// </summary>
        /// <param name="curvesCount">Количество полос</param>
        /// <param name="baseColor">Основной цвет</param>
        /// <param name="wideRange">Степень неровности полос</param>
        /// <param name="colorRange">Разброс цветов полос</param>
        /// <param name="bridhnessRange">Разброс яркости полос</param>
        /// <returns></returns>
        private Color[] GenGasTex(Int32 curvesCount, Color baseColor, Int32 wideRange, Single colorRange,
                                  Single bridhnessRange)
        {
            var curves = new Int32[curvesCount][];             //Создание массива линий

            for (Int32 i = 0; i < curvesCount; i++)
            {
                curves[i] = new Int32[XSize];
            }
            for (Int32 i = 1; i < curvesCount - 1; i++)
            {
                curves[i] = Curves.GenerateCurve(XSize, i * YSize / curvesCount + Random.Range(-wideRange, wideRange),
                                                 (Single)wideRange / 500);
            }
            for (Int32 x = 0; x < XSize; x++)
            {
                curves[curvesCount - 1][x] = YSize - 1;
            }


            var colors   = new Color[XSize * YSize];
            var colors2D = new Color[XSize, YSize];

            for (Int32 i = 0; i < curvesCount - 1; i++)             //Перебираем промежутки между кривыми и заполняем их
            {
                var currentColor = baseColor;
                currentColor += new Color
                                (
                    baseColor.r + Random.Range(-colorRange, colorRange),
                    baseColor.g + Random.Range(-colorRange, colorRange),
                    baseColor.b + Random.Range(-colorRange, colorRange)
                                );


                Single rnd = Random.Range(-bridhnessRange, bridhnessRange);
                currentColor += new Color(rnd, rnd, rnd);

                for (Int32 x = 0; x < XSize; x++)
                {
                    for (Int32 y = curves[i][x]; y < curves[i + 1][x]; y++)
                    {
                        var currClr = currentColor;
                        currClr += new Color(Random.Range(-0.01f, 0.01f), Random.Range(-0.01f, 0.01f), Random.Range(-0.01f, 0.01f));

                        colors2D[x, y] = currClr;
                    }
                }
            }

            Int32 counter = 0;

            for (Int32 y = 0; y < YSize; y++)
            {
                for (Int32 x = 0; x < XSize; x++)
                {
                    colors[counter] = colors2D[x, y];
                    counter++;
                }
            }

            return(colors);
        }