Présentation du projet

Le but de ce projet est de créer un rendu logiciel en utilisant uniquement le langage C++, sans aucune bibliothèque tierce. L'objectif est de générer une image à partir d'un modèle 3D composé d'une mesh triangulée et de textures.

Fonctionnement du rendu

Le programme utilise une classe pour gérer les fichiers TGA, qui est l'un des formats d'image les plus simples supportant les images RGB, RGBA et grayscale. La seule fonctionnalité disponible au début est la possibilité de définir la couleur d'un pixel unique.

Il n'y a pas de fonctions intégrées pour dessiner des segments de ligne ou des triangles, nous allons donc les implémenter manuellement. Le code source complet est disponible sur GitHub, et le code source initial fourni aux étudiants est également disponible.

Implémentation du rendu

Voici un extrait du code source initial :

constexpr TGAColor white   = {255, 255, 255, 255}; // attention, BGRA order
constexpr TGAColor green = { 0, 255, 0, 255};
constexpr TGAColor red = { 0, 0, 255, 255};
constexpr TGAColor blue = {255, 128, 64, 255};
constexpr TGAColor yellow = { 0, 200, 255, 255};
int main(int argc, char** argv) {
constexpr int width = 64;
constexpr int height = 64;
TGAImage framebuffer(width, height, TGAImage::RGB);
int ax = 7, ay = 3;
int bx = 12, by = 37;
int cx = 62, cy = 53;
framebuffer.set(ax, ay, white);
framebuffer.set(bx, by, white);
framebuffer.set(cx, cy, white);
framebuffer.write_tga_file("framebuffer.tga");
return 0;
}

Ce code produit une image 64x64, qui est ensuite enregistrée dans un fichier TGA.

Compilation et résultat

La compilation du code produit une image qui peut être visualisée avec un éditeur d'images. L'image générée est une représentation simple d'un rendu logiciel, et peut être utilisée comme point de départ pour des projets plus complexes.