2011-06-11 13 views
7

Esta pregunta es muy similar a la planteada here.Generación de terreno sobre la marcha basada en un terreno existente

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

Main Map

Este mapa se realiza mediante el ruido 2D Perlin y, a continuación, ejecutar a través de los tipos de asignación creados de alturas y los valores de color a cada elemento en el terreno en función de la altura o la pendiente del elemento correspondiente, tan bonito 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 1200 por 800 de generación lleva aproximadamente 2 segundos en mi plataforma.

Ahora zoom sobre el rectángulo resaltado:

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

Obviamente, con el aumento de tamaño viene detalles perdidos. Y aquí radica el problema. Quiero crear detalles adicionales sobre la marcha, y luego escribirlos en el disco mientras 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 vino a la mente que he implementado rápidamente:

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

Ésta es una vista ampliada de un nuevo terreno local sesgada creado a partir de un elemento de la muestra de la edad 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 cantidad de modificaciones, como, por ejemplo, si se mueve una unidad de la izquierda y arriba del espacio de rejilla de color amarillo, en el azulejo playa, el terreno cambia completamente:

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

Así para que funcione correctamente, necesitarás 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 aproximadamente 40 espacios de cuadrícula en el mundo local requeridos para alcanzar la siguiente ficha más en el mundo. Eso parece complicado y muy poco elegante.

El segundo enfoque sería dividir la cuadrícula del mapa original en bits más pequeños, tal vez dividiendo cada cuadrado por 4? No lo he implementado y no estoy seguro de cómo lo haría de una manera que en realidad aumentaría los detalles, pero creo que eso probablemente termine 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.

Respuesta

8

Reescriba su ruido de Perlin para que sea una función de la 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.

Cuestiones relacionadas