Estou projetando um jogo parcialmente composto por exploração de planetas. Quero usar a geração pseudo-aleatória para eles, regenerando a partir de uma semente definida quando precisar carregá-los, em vez de armazenar todos os detalhes, o que seria muito pesado. Então, armazenarei em um arquivo a semente aleatória e as modificações feitas pelo jogador, se houver.
O jogador deve poder ver o planeta em órbita (com nível muito baixo de detalhes, depois descer ao chão, aumentando lentamente o nível de detalhes da região em que está pousando e descarregando os que estão do outro lado). do planeta, que ficam fora do campo de visão do jogador.
Se eu tivesse que fazê-lo em um terreno plano, faria facilmente com um sistema de blocos quadrados. Mas o problema aqui é que os planetas são - quase - esferas.
Então, qual seria a melhor maneira de carregar detalhes do solo (relevo e objetos aterrados) em torno de um ponto preciso?
Eu já pensei em duas soluções, mas ambas têm um ponto fraco:
1. Cortando a esfera em pedaços quadrados.
Uma vez que o jogador esteja próximo o suficiente do solo, só preciso melhorar os detalhes dos quadrados mais próximos a partir de sua posição.
Se não for suficiente, ainda posso cortar cada quadrado em sub-quadrados para carregar quando os jogadores estiverem no chão ou realmente perto do chão.
Mas, como você pode ver na figura, existe um problema se o jogador tentar pousar em um poste: os quadrados se tornam retângulos muito finos ou até triângulos para a última linha e, além do fato de que seriam muitos para carregar, geração pareceria distorcida.
2. Partindo de um icosaedro.
Aqui, eu poderia aumentar o mosaico do triângulo em torno da posição do jogador quando ele / ela estiver chegando perto.
Mas não sei como localizar triângulos perto da posição do jogador. Ouvi dizer que as coordenadas cartesianas podem ser úteis nesse caso, mas não sei como usá-las.
Estou usando C ++ / OpenGL para isso, então o principal a ser gerado e carregado aqui são os vértices que representam o relevo da superfície e a cor / textura.