Gradient Circles for Map Generator
So mache ich einen Kartengenerator, der zufällige Inseln macht. Es verwendet Perlin-Rauschen im Herzen des Generators und dann eine Methode, bei der Kreise mit Farbverläufen verwendet werden, um die Inseln zu erstelle
Die Kreismethode erstellt eine Reihe von Kreisen im Mittelpunkt der Karte mit einem Farbverlauf von 64 bis 0. Das Problem ist, dass diese Methode einen unnatürlichen Blick auf Teile der Karte mit kreisförmigen Kanten erzeugt. Wenn das Perlin-Rauschen für ein Pixel erzeugt wird, wird dieses Pixel auf der Verlaufskarte abgerufen und dann mit dem blauen Wert multipliziert.
Wenn das Perlin-Rauschen für Pixel 1, 5 eine Eins ergibt und der Blauwert in der Gradientenkarte 54 ist, wird ein Rauschwert von 54 ausgegeben. Wenn das Perlin-Rauschen für Pixel 130, 560 0,5 ist und der Gradientenfarbwert 54 ist 64 dann der Rauschwert von 32.
Hier ist was ich bekomme:
Der Code enthält zwei wichtige Punkte, das Perlin-Bit:
noise = NoiseGenerator.Noise(x, y);
double gradColour = getGradColour(x, y).B;
double addedNoise = noise * gradColour;
double gradNoise = addedNoise;// - gradColour;
Und dann der Gradientenkartengenerator:
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;
}
if(Y < 30)
{
Y = 30;
}
DrawGrad(X, Y, R, Color.FromArgb(255, 0, 0, rnd.Next(40, 64)), Color.FromArgb(0, 0, 0, rnd.Next(13, 17)));
}
Ich habe mich nur gefragt, ob jemand andere Methoden in C # kennt, die mit Perlin-Rauschen eine Insel erzeugen könnten. Jeder Rat wäre sehr dankbar.