因此,我正在制作一个可生成随机岛的地图生成器。它在生成器的心脏处使用Perlin噪声,然后在使用具有渐变的圆的方法来制作孤岛。
circle方法在地图的中心创建了多个圆形,其渐变从颜色开始(从64到0)渐变。问题在于,此方法在具有圆形边缘的地图部分上创建了非自然外观。当为一个像素生成Perlin噪声时,它将在渐变图上获得该像素,然后使其与蓝色值互斥。
因此,如果Perlin噪声在像素1、5上给出1,并且渐变图上的蓝色值为54,则将输出54的噪声值。如果在像素130、560上的Perlin噪声为0.5,且渐变颜色值为64那么噪声值为32。
该代码有两个关键点,佩林位:
noise = NoiseGenerator.Noise(x, y);
double gradColour = getGradColour(x, y).B;
double addedNoise = noise * gradColour;
double gradNoise = addedNoise;// - gradColour;
然后是渐变图生成器:
public static void DrawGrad(float X, float Y, float R, Color C1, Color C2)
{
Graphics g = Graphics.FromImage(imgGrad);
GraphicsPath path = new GraphicsPath();
path.AddEllipse(X, Y, R, R);
PathGradientBrush pathGrBrush = new PathGradientBrush(path);
pathGrBrush.CenterColor = C1;
Color[] colours = { C2 };
pathGrBrush.SurroundColors = colours;
g.FillEllipse(pathGrBrush, X, Y, R, R);
//g.FillEllipse(Brushes.Red, X, Y, R, R);
g.Flush();
}
int amount = rnd.Next(25, 30);
for (int i = 0; i < amount / 4; i++)
{
float X = rnd.Next(-800, 1748);
float Y = rnd.Next(-800, 1748);
float R = rnd.Next(1000, 1200);
DrawGrad(X, Y, R, Color.FromArgb(255, 0, 0, rnd.Next(15, 20)), Color.FromArgb(0, 0, 0, 0));
}
for (int i = 0; i < amount; i++)
{
double positionDiv = 1.98;
double X1 = rnd.Next(0, 450) / positionDiv;
double Y1 = rnd.Next(0, 450) / positionDiv;
double R1 = rnd.Next(300, 650) / 4;
float R = (float)R1;
float X = (float)X1;
float Y = (float)Y1;
while (X + R > 1004)
{
X = 924 - R;
}
while (Y + R > 1004)
{
Y = 924 - R;
}
if(X < 30)
{
X = 30;
}
我只是想知道是否还有其他人知道C#中的其他方法可以使用perlin噪声创建孤岛?任何建议将不胜感激。
相关分类