Pregunta

Esta pregunta es muy similar a la planteada aquí.

Mi problema es que tengo un mapa, algo como esto:

Main Map

Este mapa se realiza con el ruido 2D Perlin, y luego se ejecuta a través del mapa de altura creado que asigna tipos y valores de color a cada elemento en el terreno en función de la altura o la pendiente del elemento correspondiente, por lo que es bastante estándar. La matriz de mapas es bidimensional y las dimensiones exactas del tamaño de la pantalla (píxel por píxel), por lo que a las 1200 por 800 generación tarda aproximadamente 2 segundos en mi plataforma.

Ahora se acerca al rectángulo resaltado:

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

Obviamente, con mayor tamaño viene los detalles perdidos. Y aquí radica el problema. Quiero crear detalles adicionales sobre la marcha, y luego escribirlo en el disco a medida que el jugador se mueve (el jugador simplemente sería un punto restringido al movimiento a lo largo de la cuadrícula). Veo dos enfoques para hacer esto, y el primero que me vino a la mente rápidamente implementé:

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

Esta es una vista ampliada de un nuevo terreno local sesgado creado a partir de un elemento muestreado del antiguo terreno, que se destaca por el espacio de la cuadrícula amarilla (a la izquierda del centro) en la imagen anterior. Sin embargo, este sistema requeriría una gran modificación, ya que, por ejemplo, si mueve una unidad a la izquierda y hacia arriba del espacio de la cuadrícula amarilla, en el azulejo de la playa, el terreno cambia por completo:

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

Entonces, para que eso funcione correctamente, necesitaría hacer una cantidad excesiva de, supongo que la palabra sería interpolación, para crear una transición suave a medida que el jugador movió los más o menos 40 espacios de cuadrícula en el mundo local requerido para llegar al siguiente mosaico en el mundo over. Eso parece complicado y muy poco elegante.

El segundo enfoque sería romper la cuadrícula del mapa original en bits más pequeños, ¿tal vez dividir cada cuadrado por 4? No he implementado esto y no estoy seguro de cómo lo haría de una manera que realmente aumentaría los detalles, pero creo que esa probablemente terminaría siendo la mejor solución.

¿Alguna idea sobre cómo podría abordar esto? Tenga en cuenta que tiene que ser local y sobre la marcha. Solo aumentar la resolución del mapa es algo que quiero evitar a toda costa.

¿Fue útil?

Solución

Reescribe su ruido de Perlin para que sea una función de posición. Luego puede aumentar las octavas (y, por lo tanto, el nivel de detalle) y volver a muestrear el área a una resolución más alta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top