dimanche 4 mars 2007

Affichage d'un terrain dans TV3D : Méthode détaillée

La méthode détaillée pour l'affichage d'un terrain sous TV3D arrive.

Je vais ici vous détailler pas à pas la démarche à suivre afin d'obtenir un résultat tel celui présenté dans le post précèdent que j'ai obtenue en m'inspirant moi-même de différents tutoriaux.
Premièrement il vous faut bien sûr TV3D (j'utilise la démo de la version 6.2), distribuée gratuitement sur le site officiel. Par la suite procurez vous L3DT un logiciel qui permet de générer des Heightmap et texture/Lightmap assez facilement. L3DT est disponible à cette adresse.

Nous allons tout d'abord créer les deux textures nécessaires à la création du terrain.

Pour la Heightmap :

  • File → New map → Design/inflate
  • Choisissez la résolution maximale pour la version standard (2048*2048) afin d'obtenir un résultat potable.
  • Validez afin d'arriver à la preview de la Heightmap.
  • Vous pouvez alors modifier à votre guise grâce aux outils Tools → DM paint tool.
  • Une fois satisfait de vos reliefs, Operations → Heightfield → Generate map. Vous obtiendrez alors après quelques minutes de calculs (plus la map est grande, plus c'est long) votre Heightmap.
  • File → Export → Active map. Exportez en BMP pour une meilleure qualité ou optez pour le jpeg pour un fichier plus léger.
Voila votre heigtmap est prête à être utilisé, il ne manque plus que la texture.



Pour la Texture :

  • Operations → Attributes map → Generate map, première étape, ne sauvez pas le résultat.
  • Operations → Terrain normals → Generate map, seconde étape, les reliefs, ne sauvez pas le résultat.
  • Operations → Light map → Generate map, comme son nom l'indique, réglez à votre guise les différents paramètres.
  • Operations → Texture map → Generate map, étape finale, sauvegardez le résultat de la même manière que précèdemment.




Voila, vous avez créé vos 2 textures, passons maintenant au codage.

Note : Le code est en C#.

Il faut tout d'abord charger TV3D et lancer les modules suivants :
TVEngine
TVTextureFactory
TVScene
TVLandscape
TVInputEngine
2 Options s'offrent à vous :
Soit pour vous faciliter la tâche vous pouvez partir de l'exemple A07 qui instancie ces modules et charge déjà un terrain. Le code est très bien documenté, je vous invite donc à en prendre connaissance si vous n'avez pas les connaissances requises pour lancer ces modules. (je me suis embêté au départ à tout faire à la main quand j'ai découvert cet exemple.)
Soit vous partez de 0.


A partir de ce code nous n'avons plus qu'à modifier quelques lignes de codes afin d'adapter nos textures et le tour est joué.

Il suffit de se rendre à la ligne 193 et de modifier par ceci :


Land.GenerateHugeTerrain("location de votre Heightmap", CONST_TV_LANDSCAPE_PRECISION.TV_PRECISION_BEST, 8, 8, 0, 0, true);
Land.ExpandTexture(Globals.GetTex("LandTexture"), 0, 0, 8, 8, false);


TextureFactory.LoadTexture("Resources\\cmap.bmp", "LandTexture",2048,2048,CONST_TV_COLORKEY.TV_COLORKEY_NO,true,true );


Land.SetTexture (Globals.GetTex("LandTexture"),-1);

Explication de ces modifications (si elle ne vous sont pas transparentes) :

Land.GenerateHugeTerrain("location de votre Heightmap", CONST_TV_LANDSCAPE_PRECISION.TV_PRECISION_BEST, 8, 8, 0, 0, true);
Ici, on créé le terrain à partir de votre Heightmap, et on précise que l'on veux la meilleure qualité. (si vous rencontrez des problèmes de performances remplacez BEST par AVERAGE.

Land.ExpandTexture(Globals.GetTex("LandTexture"), 0, 0, 8, 8, false);
Là on précise au moteur que la texture doit prendre tout le terrain (On modifie la taille).

TextureFactory.LoadTexture("Resources\\cmap.bmp", "LandTexture",2048,2048,CONST_TV_COLORKEY.TV_COLORKEY_NO,true,true );


Land.SetTexture (Globals.GetTex("LandTexture"),-1);
Et enfin on charge et on applique la texture dont on à précèdemment définit la taille.


Voila, votre terrain est prêt à être parcouru.

Prochainement la création d'une entité représentant le joueur sur ce même monde.

2 commentaires:

Anonyme a dit…

Intéréssant, en plus le rendu de TV3D est vraiment sympa.

Sinon n'hésites pas à poster des articles sur le moteur réseau, moi ça m'intéresse.

Bon courage pour la suite ;)

Maldus a dit…

Ok, je continuerai alors à poster mes avancées sur le moteur réseau.

Merci et bon courage toi aussi dans ton aventure avec Aereven. (je visite par ailleurs assez souvent ton devblog mais je n'ai pas encore poster :) )