Pergunta

Qual seria a melhor maneira de implementar, armazenar e processar mundos esféricos, como os de esporos ou infinito, mas sem a in-entre os estágios de esporos, e vários mundos ala universo infinito. Não faça suposições sobre como o planeta em si é gerado ou seu tamanho / escala.

Foi útil?

Solução

Para renderização, você vai precisar usar algum tipo de algoritmo de nível de detalhe, a fim de perfeitamente passar de perto da superfície do planeta para longe. Há muitos algoritmos LOD dinâmica ( ver aqui ). Um algoritmo mais velho, chamado ROAM, pode ser adaptado para lidar com objetos esféricos, ou planetas ( esférica ROAM ). clipmaps geometria é um algoritmo mais recente, mais popular que pode ser adaptado a superfícies esféricas bem .

Como para armazenar os dados, você pode querer olhar para geração processual (dependendo de suas necessidades) para texturização, heightmaps, etc. Isso é semelhante à forma como a Infinity e Spore fazer as coisas. Você pode ler um pouco sobre texturização procedural aqui . heightmaps processuais são mais simples, dependendo de quão complexo / realista você quer seu terreno. No nível mais simples, você pode simplesmente deslocar a sua altura vértice por uma função de ruído Perlin.

Outras dicas

Se você está procurando algo para armazenar dados sobre a superfície, você pode olhar para HEALpix . É software desenvolvido pela comunidade astronomia especificamente para mapear o céu (outra superfície esférica).

HEALpix cria uma malha que descreve a posição e o tamanho das faces da superfície e atribui a cada um um ID. Você pode então usar esse ID como a chave ou índice para acessar o máximo de detalhes que quiser sobre esse nível particular.

HEASpix fornece métodos para encontrar áreas de superfície vizinha e pode dar posições centrais e vertex para cada ponto de malha.

É uma malha hierárquica que lhe permite subdividir cada rosto, tanto quanto você quer assim que você poderia, em teoria, ter partes da malha em baixa resolução e outras partes em níveis mais elevados de detalhe, se você queria. Ele tem a propriedade agradável que é infinitamente divisível (até aos seus limites de memória) e cada pixel da grade em uma determinada resolução tem a mesma área que todos os outros nesse nível resolução.

O pacote de distribuição fornece um monte de coisas que você provavelmente não vai precisar, mas as bibliotecas do núcleo deve ser útil.

Este é provavelmente não o que você está procurando ... Mas o que o Parreira. É uma história boa.

Eons atrás, quando os dinossauros ainda percorriam a terra e memória ainda foi medido em kilobytes, eu joguei com alguns softwares para gerar planetas fractally.

A ideia era criar um retângulo 2NxN representando o planeta. Corte o planeta ao meio um monte de vezes deslocando as duas metades pouco de cada vez. (Onda sinusoidal para o corte com desvio de fase aleatória e amplitude. Outra onda sinusoidal aleatório para o deslocamento.) Afterwords, inundar as áreas de nível mais baixo, com água e cor-de código o restante pela altitude.

Em seguida, coloque uma esfera de diâmetro N em cima e projeto, envolvendo uma região NxN do mapa em torno da metade da esfera. Mova a esfera ao redor do mapa e parecia que estava girando.

Gostaria de sugerir o uso de algum tipo de modelo de polígono na memória para implementá-las dos mundos, use um arquivo para armazená-los e torná-los usando algum tipo de 3d-motor. Ou isso, ou apenas um centro de ponteiro e um raio, juntamente com uma folha de prova para descrever a geografia do mundo.

Edit: Obrigado por um pouco mais detalhadamente. Dependendo da quantidade de detalhes que você precisa, você vai precisar usar algum tipo de método para quebrar a textura em partes menores - você pode apenas gerar a textura para 20 faces e construir um Icosahedron ao redor do ponto central. Dê uma olhada na mapear projeções para alguns pensamentos sobre como isso é feito na vida real.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top