Atualmente, estou trabalhando em um gerador de planeta processual OpenGL. Espero usá-lo para um RPG espacial, que não permitirá que os jogadores desçam à superfície de um planeta, então eu ignorei qualquer coisa relacionada ao ROAM. No momento, estou desenhando um cubo com VBOs e mapeando uma esfera.
Eu estou familiarizado com a maioria das técnicas de geração de mapas de altura fractal e já implementei minha própria versão do deslocamento do ponto médio (não é útil neste caso, eu sei).
Minha pergunta é: qual é a melhor maneira de gerar proceduralmente o mapa de altura. Eu observei o libnoise, que me permite criar mapas / texturas de altura inclináveis, mas até onde eu posso ver, eu precisaria gerar uma rede como essa .
Deixando a telha óbvia.
Alguém poderia me aconselhar sobre o melhor caminho a seguir?
Qualquer entrada seria muito apreciada.
fonte
O mapeamento da altura do deslocamento do ponto médio é um bom ponto de partida. OP, por que você acha que não é?
O OP é bom para modelar a superfície do planeta como um mapa cúbico, porque qualquer mapa plano (por exemplo, projeção de Mercator) terá distorções feias e complicadas, em termos matemáticos.
Se eu fosse OP, esqueceria a geometria do planeta em grande escala a princípio. Eu faria um mapa de cubo em que cada face é 2 ** N + 1 pixels (2,3,5,9,17,33 ...) e cada texel codifica uma altura [0..N) em que 0 é a altitude de a vala mais baixa esperada e N é a altitude da montanha mais alta esperada do planeta.
Eu calculava alturas aleatórias para os oito vértices do cubo e as propagava para os seis quadrados do mapa do cubo, para que cada vértice apareça três vezes.
Ao gerar recursivamente alturas fractais para os pontos médios das arestas, certifique-se de propagar os vértices da aresta da face para a outra face que os compartilha.
Quando terminar, tenho um mapa de cubo em que todos os texels de borda são dobrados e todos os texels de canto são triplicados. Não há necessidade de convertê-lo em um mapa normal - eu usaria o algoritmo no artigo de Morten Mikkelsen para renderizar normais diretamente do mapa de altura em tempo de execução.
Em tempo de execução, eu provavelmente renderizaria um quad que cubra a projeção do planeta na tela e faria um único teste de interseção de esfera de raio no shader de pixel para descobrir se eu atingi o planeta e onde. Certamente é melhor rasterizar um modelo de esfera altamente pavimentado e obtém uma boa borda suave também.
fonte
O ruído de deslocamento do ponto médio, com o deslocamento máximo dimensionado pela longitude absoluta do pixel, pode produzir um mapa de ruído esférico rapidamente. Tabelas de cores com altitude, inclinação e luz solar ou longitude como parâmetros podem ser usadas para sombrear o planeta automaticamente.
fonte