Para um editor de terreno 3D "clássico", as etapas podem ser as seguintes:
Gere uma malha (por exemplo, uma grade de quadrados, cada quadrado composto por dois triângulos), todos os vértices são compartilhados entre triângulos (para que exista apenas um normal por interseção).
![insira a descrição da imagem aqui](https://i.stack.imgur.com/0oPsl.jpg)
Isso deve ser feito em 3DMesh e renderizado em seu programa.
Crie uma ferramenta para elevar e abaixar (menores e maiores) partes da grade (é necessário calcular onde está o cursor do mouse na malha e modificar os vértices das malhas, mas apenas para cima e para baixo).
Crie uma textura grande (como 1024x1024x4 ou melhor) e texture com o que é chamado de mapa de splat:
![insira a descrição da imagem aqui](https://i.stack.imgur.com/WCFB5.png)
Torne possível pintá-lo (com R, G, B OR Alfa, não rosa por exemplo) e escolher texturas substituindo aquelas cores primárias feias (Vermelho, Azul, Verde, Alfa) ou, além disso, seja representado por elas:
O sombreador (que você precisará criar) deve multiplicar essas texturas agradáveis (como pedra, grama, ...) pela intensidade do mapa de splat (o feio) e, em seguida, misturar o todo para que pareça, por exemplo (com apenas 2 cores), assim:
![insira a descrição da imagem aqui](https://i.stack.imgur.com/s1SDI.png)
Desculpe pelas imagens grandes, juntei isso no trabalho ...
A primeira coisa é deixar claro a estrutura de dados do seu terreno e o que você deseja de um editor. É uma malha? Uma variedade de alturas? Algum tipo de sistema voxel no estilo Minecraft? Você precisa adicionar recursos de terreno de malha, como árvores e edifícios? Manualmente, automaticamente ou ambos? Eu poderia continuar, mas você captou a ideia.
Um editor de terreno básico não é tão difícil de escrever, mas os detalhes variam muito, dependendo do jogo que você está fazendo e, portanto, do tipo de terreno que você deseja criar.
fonte
Isso é apenas um acompanhamento da resposta de Valmond, mas não parece curto o suficiente para adicionar como comentário.
Depois de criar um editor básico, experimente gerar o mapa de altura inteiramente na GPU. Isso é totalmente opcional, mas é uma boa maneira de transferir o trabalho para a GPU para um terreno em constante mudança. Valmond já mencionou a textura que está sendo feita no pixel shader, mas o shader de vértice também pode ser usado, usando uma pesquisa de textura para aumentar e diminuir os vértices na grade. Aqui está um tutorial sobre como fazer isso com o shader de vértice. O material não-shader é específico para C # e XNA, mas o material importante está no código do shader.
Nesse caso, seu código no lado da CPU lidará apenas com a modificação da textura da escala de cinza armazenada na memória. Sua grade de malha permanece plana, os vértices não são atualizados pela CPU. Cada vez que a textura é alterada, a nova textura pode ser passada para a GPU.
Lembre-se de que nem todos os modelos de sombreador suportam amostragem de textura no sombreador de vértices (por exemplo, no HLSL, você precisa de pelo menos o sombreador modelo 3.0).
fonte
Você pode dar uma olhada no http://www.gre3d.org/addonforums/viewforum.php?f=16 da ETM Ogre , para lhe dar algumas idéias. O Artifex Terra é baseado nele, se você quiser vê-lo em ação.
fonte