Introduction :

Les développements ont bien avancé, beaucoup de nouvelles choses ont été implémentées. Il a donc fallu réorganiser grandement le code. Des classes ont été créées afin de grouper les fonctionnalités et de répondre à des besoins objets.

Les plus grosses évolutions qui ont été réalisées, par rapport au premier tutoriel, sont la mise en place du chunk, c'est à dire d'un groupement de Voxel, et l'utilisation de tableaux de données pour stocker les informations des vertex. Cette dernière évolution permettra le passage de l'affichage "immédiat", vers l'affichage "VBO", ce qui aura pour conséquence, une nette augmentation des performances.

Un peu de théorie :

Sachez que je me suis grandement inspiré de ce site : https://sites.google.com/site/letsmakeavoxelengine/home, pour réaliser mes tutoriaux. Cependant, les exemples de code sont assez compliqués à comprendre pour les novices, car l'auteur ne fournit pas le code source de sont moteur d'affichage (ce que je ne critique pas, il a tout à fait le droit de conserver pour lui son propre travail). Du coup, il a fallu que je m'appuie sur la description de ses tutoriels, pour créer mon propre moteur 3D (classe moteur3D), qui réalise à peu près la même chose.

Nous avons vu dans le premier tutoriel, la création d’un cube simple avec 6 polygones carrés. Dans ce tutoriel, le programme dessine un ensemble de cube (chunk), avec pour chaque cube, 12 polygones triangulaires. Et oui utiliser un polygone triangulaire et plus performant qu’un polygone carré, tout simplement parce 3 points dans l’espace fait forcément un plan, ce qui n’est pas le cas pour 4 points et nécessite des calculs supplémentaires pour en réaliser le rendu.

Un peu de pratique :

- Vector3D
  Classe définissant un vecteur 3D, avec de nombreuses méthodes de transformation de vecteur.
- block
  Classe définissant l’entité simple (cube) du voxel
- chunk
  Classe définissant un chunk, il permet de construire un ensemble de block et d’en définir son maillage. Les 2 constantes CHUNKSIZE_XY et CHUNKSIZE_Z, permettent de spécifier le nombre de block par cotés et par hauteur.
- moteur3D
  Classe définissant la gestion de tout l’affichage 3D, le gestionnaire d’extension GLEW a été ajouté dans cette classe. (Penser à l’intégrer au projet)
- gestionScene
  Classe gérant la partie SFML, elle sera utilisée pour gérer les GUI et les menus, bien plus tard.

>>>> 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, j'ajouterai la première optimisation permettant de diminuer nettement le nombre de polygones à afficher, en supprimant tous les polygonnes des faces des cubes qui sont côte à côte.

Captures d'écran :