Estoy diseñando un juego parcialmente compuesto de exploración de planetas. Quiero usar la generación pseudoaleatoria para ellos, regenerando a partir de una semilla definida cuando tengo que cargarlos en lugar de almacenar cada detalle, lo que sería demasiado pesado. Así que solo almacenaré en un archivo la semilla aleatoria y las modificaciones realizadas por el jugador, si las hubiera.
El jugador debe poder ver el planeta desde la órbita (con un nivel de detalles muy bajo, luego descender al suelo, aumentando lentamente el nivel de detalles de la región donde está aterrizando y descargando los que están en los otros lados) del planeta, que salen del campo de visión del jugador.
Si tuviera que hacerlo en un terreno plano, lo haría fácilmente con un sistema de trozos cuadrados. Pero el problema aquí es que los planetas son, casi, esferas.
Entonces, ¿cuál sería la mejor manera de cargar los detalles del terreno (relieve y objetos conectados a tierra) alrededor de un punto preciso?
Ya pensé en dos soluciones, pero ambas tienen un punto débil:
1. Cortar la esfera en trozos cuadrados.
Una vez que el jugador está lo suficientemente cerca del suelo, solo tengo que mejorar los detalles de los cuadrados más cercanos desde su posición.
Si no es suficiente, aún puedo cortar cada cuadro en subcuadros para cargar cuando los jugadores están en el suelo o muy cerca del suelo.
Pero como puede ver en la imagen, hay un problema si el jugador intenta aterrizar en un poste: los cuadrados se vuelven rectángulos muy delgados, o incluso triángulos para la última línea, y además el hecho de que serían muchos para cargar, La generación parecería distorsionada.
2. Partiendo de un icosaedro.
Aquí, podría aumentar el mosaico de triángulos alrededor de la posición del jugador cuando él / ella se está acercando.
Pero no sé cómo ubicar triángulos cerca de la posición del jugador. Escuché que las coordenadas cartesianas podrían ser útiles en ese caso, pero no sé cómo usarlas.
Estoy usando C ++ / OpenGL para ello, por lo que lo principal para generar y cargar aquí son vértices que representan el relieve de la superficie y el color / textura.