Domanda

Questa domanda è molto simile a quella posta qui .

Il mio problema è che ho una mappa, qualcosa di simile:

Mappa principale

Questa mappa viene effettuato utilizzando 2D Perlin rumore, e quindi passa attraverso la heightmap creato dei tipi e valori di colore a ciascun elemento nel terreno in base all'altezza o l'inclinazione dell'elemento corrispondente, in modo piuttosto standard. L'array mappa è due dimensione dimensioni e il esatte della dimensione dello schermo (pixel per pixel), quindi a 1200 da 800 generazione richiede circa 2 secondi sul mio impianto.

Ora lo zoom sul rettangolo evidenziato:

http://i.stack.imgur.com/hrZnM.png

Ovviamente con l'aumento delle dimensioni viene perduta dettagli. E qui sta il problema. Voglio creare ulteriori dettagli al volo, e poi scrivere su disco come il giocatore si muove intorno (il giocatore sarebbe semplicemente un punto limitato al movimento lungo la griglia). Vedo due approcci per fare questo, e il primo che è venuto in mente ho subito implementato:

http://i.stack.imgur.com/bbLia.png

Questa è una vista ingrandita di un nuovo terreno locale polarizzato creato da un elemento campionata della vecchia terreno, che si evidenzia con lo spazio della griglia giallo (alla sinistra del centro) nell'immagine precedente. Tuttavia questo sistema richiederebbe una grande quantità di modifiche, come, ad esempio, se si sposta una sola unità a sinistra e fino dello spazio della griglia gialla, sulla piastrella spiaggia, il terreno cambia completamente:

http://i.stack.imgur.com/6shKz.png

Quindi, per questo al lavoro correttamente avresti bisogno di fare una quantità eccessiva di, credo che la parola sarebbe interpolazione, per creare una transizione liscia come il giocatore spostato le 40 o giù di lì grid-spazi del mondo locali necessari per raggiungere la piastrella accanto sopra in tutto il mondo. Che sembra complicato e molto poco elegante.

Il secondo approccio sarebbe per spezzare la griglia della mappa originale in pezzi più piccoli, magari dividendo ogni quadrato da 4? Non ho realizzato questo e io non sono sicuro di come lo farei in un modo che sarebbe effettivamente aumentare il dettaglio, ma penso che probabilmente finirà per essere la soluzione migliore.

Tutte le idee su come avrei potuto avvicinarmi a questo? Tenete a mente che deve essere locale e on-the-fly. Basta aumentare la risoluzione della mappa è una cosa che voglio evitare a tutti i costi.

È stato utile?

Soluzione

Rewrite your Perlin noise to be a function of position. Then you can increase the octaves (and thus the detail level) and resample the area at a higher resolution.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top