Présentation :
Le projet consiste à la mise en place d’un pipeline graphique. Un pipeline graphique est l’un des constituants d’une carte graphique, elle a pour but de transformer une liste de sommets d’un fichier 3D en un fichier d’images pouvant être aisément affichées à l’écran.
Le but de ce projet est donc de recréer virtuellement ce principe avec des méthodes plus ou moins compliquées et perfectionnées afin de nous faire comprendre la mécanique complexe qui anime les cartes graphiques que nous utilisons tous les jours.
Le projet doit être fait en C++ qui est un langage orienté objet utile afin d’organiser clairement les différentes étapes.
Organisation d’un pipeline graphique :
Le pipeline est constitué d’un ensemble d’étapes :
-
Une opération de transformation, appelée communément « vertex shader ». Elle consiste à transformer les points qui sont dans un repère local dans le repère de l’observateur et y ajouter un effet de perspective.
-
Le »culling » consiste à regarder si la face que l’on veut calculer se trouve dans le champ de la caméra et pas cacher par une autre facette. Si la facette est cachée, elle est abandonnée, car elle est non visible pour accélérer les calculs.
-
Le cliping est une opération qui a pour but de découper ou rejeter les facettes qui n’apparaissent pas dans l’écran ou n’apparait pas totalement à l’écran. Si les sommets sont hors du plan de l’écran, on les rejette, sinon on découpe la facette pour ne pas calculer ce qui sort de l’écran.
-
Une opération de discrétisation qui consiste à tracer la facette à l’écran, il y a deux types de discrétisation :
-
La création d’un Zbuffer qui correspond à afficher seulement les pixels le plus près de l’observateur, cela permet d’afficher plusieurs objets et de ne pas réécrire par-dessus un autre objet.
Méthode implémentée:
-
Pour le Tracage du maillage, j’ai implémenté la méthode de Bresenham qui est une méthode optimisée pour faire cette tâche, car cette méthode utilise des coefficients entiers ce qui pour la machine est beaucoup plus facile à faire.
-
Pour le remplissage, j’ai utilisé le remplissage naïf qui n’est pas une méthode optimisée, mais une méthode qui fonctionne quand même sauf qu’elle n’utilise pas que des entiers pour fonctionner.
-
Pour le culling il n’y avait qu’une seule implémentation possible et elle a été réalisée.
-
Pour le cliping, seul un rejet au cas où les 3 points sont hors de l’écran a été réalisé. Aucun découpage de facette n’a été fait.
-
Un modèle d’illumination élémentaire a été implémenté avec de la réflexion diffuse et de la réflexion spéculaire.
-
Les deux modèles de shader du cours ont été implémentés, l’ombrage de goureau et l’ombrage de phong.
-
Une gestion des couleurs a aussi été implémentée au niveau des objets, mais aucune implémentation de texture n’a été faite.
Code source : Envoiyer un email
Documentation : Compte rendu doxygen