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).
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:
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:
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