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); }
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); }
private void GenerateSnowCorners() { _northSnow = Curves.GenerateCurve(XSize, XSize / 2 - _snowEdge, _snowRoughness); _southSnow = Curves.GenerateCurve(XSize, _snowEdge, _snowRoughness); }
/// <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); }