Ich habe Funktionen implementiert, die jede polygonale Form zeichnen können, konnte jedoch keine glatte Form erzeugen, die die abgerundeten Kanten eines Sees nachahmt. Ich habe versucht, zwei Kreise zu erzeugen und die Kanten zu verbinden, aber es gibt nicht genug Variation oder Glätte. Hat jemand Hinweise oder Ideen, die eine solche Form erzeugen könnten?
algorithm
procedural-generation
terrain
Manderin87
quelle
quelle
Antworten:
Immer erwähnt Perlin Lärm. So habe ich die Inselformen für den Polygonkartengenerator generiert:
(x, y)
Berechnen Sie für jeden Ort in der Rauschbitmap den Abstand vom Zentrum, normalisiert, sodass die Bitmap 2x2 ist :(dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy)
.(x, y)
ist Teil der Insel, wennnoise[x, y] > 0.3 + 0.4*d*d
. Dieser Schritt versucht, die Form rund zu machen, indem Bereiche abgeschnitten werden, die weit von der Mitte entfernt sind.Die Inseln sind etwas zerlumpter als die Seen, daher bin ich mir nicht sicher, ob diese Formen Ihren Wünschen entsprechen. Ich habe eine Demo des obigen Algorithmus erstellt , mit Schaltflächen unten, um die beiden magischen Zahlen zu steuern. Es kann unterschiedliche Werte der magischen Zahlen 0,3 und 0,4 geben, die Formen erzeugen, die Sie mögen.
quelle
Sie könnten einen Perlin Noise-Algorithmus verwenden, um die Seen für Sie zu generieren. Wenn Sie eine Ansicht von oben nach unten verwenden (Polygonform, klingt wie Sie), hat dieser Typ aus Stanford genau das getan.
http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/
quelle
Eine Möglichkeit wäre, mit einem einfachen Polygon zu beginnen, vielleicht nähern Sie sich Ihren 2 Kreisen.
Versetzen Sie zuerst alle Punkte nach dem Zufallsprinzip, damit sie nicht zu sehr wie ein Kreis aussehen. Teilen Sie sie dann für jede Kante in zwei Teile und versetzen Sie den Mittelpunkt um einen kleinen zufälligen Betrag. Machen Sie so weiter, bis Sie die erforderlichen Details haben.
Dies ist ähnlich wie beim Erzeugen von Blitzgabeln.
quelle