Introduction :

Vous avez pu constater, dans le tutoriel précédent, que de nombreuses faces de blocs côte à côte sont dessiner, même si les faces sont identiques. C'est très flagrant quant tous les blocs sont actifs.

Dans ce tutoriel, nous allons donc réaliser une seconde optimisation.

Un peu de théorie :

Réalisez cet exemple simple, en paramétrant le chunk pour qu'il fasse 3 bloc de coté et 3 blocs de haut, en affichage filaire, vous obtenez, après différentes générations aléatoires, un design a peu de chose près similaire :

 

Sur la première image, on voit, sur le coté gauche, 7 faces de dessinées, et sur le coté droite, 6 faces. Sur la seconde image, j'ai mis en évidence en rouge, les polygones que l'on devrait avoir, afin d'obtenir le même rendu tout en allégeant grandement le nombre de faces. En effet, on passe de 13 faces à 5, ce qui est loin d'être négligeable.

Certains interviennent directement sur le tableau de vertex, pour en réaliser le merge. Pour ma part, j'ai préféré réaliser des boucles de contrôles pour chaque bloc actif, afin, que pour chaque face à modéliser, on vérifie si l'on peut étendre la face, tout en indiquant aux autres blocs qui ne sont pas encore gérés que certaines de leurs faces, sont déjà traitées par un autre bloc.

Un peu de pratique :

Dans le programme, j'ai donc modifié la méthode creerMesh de la classe chunk, afin d'ajouter ces boucles de contrôle. Cependant le code devient du coup très long et pas forcément clair, je tenterai de le rendre plus clair dans les autres tutoriels.

Cependant, je trouve qu'en affichage immédiat, un chunk de 30*30*30 bloc, avec des blocs aléatoirement actif, fait tomber les FPS à 60. Ce qui est à mon sens, n'est pas mal du tout.

>>>> Récupérer le projet

 

- Clic droit + déplacement souri : Déplacement autour du cube
- Molette souris : Zoom
- Touche M : Changement de mode d'affichage
- Touche R : activation aléatoire des blocks
- Touche Q : quitter

Dans le prochain tutoriel, je mettrai en place la gestion multi-chunk. Cette évolution apportera également la notion de déplacement sur l'environnement, sauvegarde et chargement des chunks.

Captures d'écran :