Pour un éditeur de terrain 3D «classique», les étapes pourraient être celles-ci:
Générez un maillage (par exemple une grille de carrés, chaque carré composé de deux triangles), tous les sommets sont partagés entre les triangles (de sorte qu'il n'y a qu'une seule normale par intersection).
Cela devrait être un 3DMesh et rendu dans votre programme.
Créez un outil pour élever et abaisser (de plus en plus petites) les parties de la grille (vous devez calculer où se trouve le curseur de la souris et modifier les sommets des mailles, mais uniquement de haut en bas).
Créez une grande texture (comme 1024x1024x4 ou mieux) et texturez-la avec ce qu'on appelle un splat-map:
Permettre de le peindre (avec R, G, B OU Alpha, pas rose par exemple) et de choisir des textures remplaçant ces vilaines couleurs primaires (Rouge, Bleu, Vert, Alpha), ou en plus, être représentées par elles:
Le shader (que vous devrez créer) devrait multiplier ces belles textures (par exemple la pierre, l'herbe, ...) avec l'intensité dans la splatmap (la laide), puis mélanger l'ensemble pour qu'il ressemble, par exemple (avec comme seulement 2 couleurs), comme ceci:
Désolé pour les grandes images, j'ai fouetté cela au travail ...
La première chose est d'être clair sur la structure des données de votre terrain et ce que vous attendez d'un éditeur. Est-ce un maillage? Un éventail de hauteurs? Une sorte de système de voxels de style Minecraft? Devez-vous pouvoir ajouter des éléments de terrain maillés comme des arbres et des bâtiments? Manuellement, automatiquement ou les deux? Je pourrais continuer, mais vous voyez l'idée.
Un éditeur de terrain de base n'est pas si difficile à écrire, mais les détails varient beaucoup en fonction du jeu que vous créez, et donc du type de terrain que vous souhaitez créer.
la source
Il s'agit principalement d'un suivi de la réponse de Valmond, mais il ne semble pas assez court pour ajouter un commentaire.
Une fois que vous aurez commencé à créer un éditeur de base, vous voudrez peut-être expérimenter en générant la carte de hauteur entièrement sur le GPU. C'est complètement facultatif mais c'est un bon moyen de décharger le travail sur le GPU pour un terrain en constante évolution. Valmond a déjà mentionné que l'éclaboussure de texture est effectuée sur le pixel shader, mais le vertex shader peut également être utilisé, en utilisant une recherche de texture pour augmenter et abaisser les sommets de la grille. Voici un tutoriel sur la façon d'accomplir cela avec le vertex shader. Le truc non shader est spécifique à C # et XNA, mais le truc important est dans le code du shader.
Dans ce cas, votre code côté CPU traitera simplement de la modification de la texture en niveaux de gris stockée en mémoire. Votre grille de maillage reste plate, les sommets ne sont pas mis à jour par le CPU. Chaque fois que la texture est modifiée, la nouvelle texture peut être transmise au GPU.
Gardez à l'esprit que tous les modèles de shader ne prennent pas en charge l'échantillonnage de texture sur le vertex shader (par exemple, dans HLSL, vous avez besoin d'au moins le shader model 3.0).
la source
Vous pouvez jeter un œil à l'ETM Ogre http://www.ogre3d.org/addonforums/viewforum.php?f=16 , qui devrait vous donner quelques idées. Artifex Terra est basé sur lui si vous voulez le voir en action.
la source