Generazione di piscine o laghi casuali


9

Ho implementato funzioni che possono disegnare qualsiasi forma poligonale, tuttavia non sono stato in grado di generare una forma liscia che imita i bordi arrotondati di un lago. Ho provato a generare due cerchi e unire i bordi ma non c'è abbastanza variazione o levigatezza. Qualcuno ha qualche suggerimento o idea che potrebbe generare una forma come questa?


Ho cercato curve più bezier, sembra che potrei essere in grado di generare un lago da quello. Qualcuno ha qualche esperienza con loro su un array 2d?
Manderin87,

Risposte:


8

sempre menzionato rumore di Perlin. Ecco come ho generato le forme dell'isola per il generatore di mappe poligonali:

  1. Genera rumore perlin.
  2. Per ogni posizione (x, y)nella bitmap rumore, calcolare la distanza dal centro, normalizzato in modo che l'immagine bitmap è 2x2: (dx, dy) = (2 * x / width - 1, 2 * y / height - 1); d = sqrt(dx*dx + dy*dy).
  3. La posizione (x, y)fa parte dell'isola se noise[x, y] > 0.3 + 0.4*d*d. Questo passaggio tenta di arrotondare la forma tagliando le aree distanti dal centro.

Le isole sono un po 'più sfilacciate dei laghi, quindi non sono sicuro che queste forme saranno di tuo gradimento. Ho creato una demo dell'algoritmo sopra , con i pulsanti in basso per controllare i due numeri magici. Potrebbero esserci diversi valori dei numeri magici 0.3 e 0.4 che producono forme che ti piacciono.


2
Il tuo lavoro è di grande ispirazione, Amit. + 10k se potessi, per circa 5 anni di meraviglia e divertimento sono uscito dalla lettura del tuo blog.
Ingegnere

4

Potresti usare un algoritmo Perlin Noise per generare i laghi per te, se stai usando una vista dall'alto verso il basso (forma poligonale, suoni come te), questo ragazzo di Stanford ha fatto proprio questo.

http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/


1
"Quel ragazzo di Stanford" è anche un utente di questo sito, FYI.
Ingegnere

chi non lo è? =) Potrei iniziare da un po 'di rumore (perlin, frattale), ma sfocare i risultati per risultati meno "irregolari". Grande articolo, a proposito - adoro come fa i fiumi.
Jari Komppa,

0

Un modo sarebbe iniziare con un poligono di base, forse il tuo approccio a 2 cerchi.

Innanzitutto compensa tutti i punti in modo casuale, quindi non assomiglia troppo a un cerchio, quindi per ogni bordo, dividerlo in 2 e compensare il punto centrale di una piccola quantità casuale. Continua fino a quando non avrai i dettagli richiesti.
Questo è simile a ciò che viene fatto quando si generano forchette di fulmini.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.