Fractol

Un superbe moteur de rendu de fractales 2D en C, optimisé et multithreadé.

Fractol est un projet de l'École 42, dont l'objectif est de générer les ensemble de Julia et de Mandelbrot, deux fractales 2D, en utilisant le langage C. Il faut notamment :

  • Permettre à l'utilisateur de créer différents ensembles de Julia
  • Pouvoir zoomer et dézoomer sur les fractales
  • Avoir un jeu de couleur pour représenter les fractales
  • Gérer correctement la fenêtre et les performances

J'ai réalisé ce projet en solo, et c'est probablement l'un de mes préférés. Je suis allé au delà du projet, et j'ai intégré :

  • Un système de multithreading pour améliorer les performances
  • L'affichage des fractales dans de multiples résolutions
  • Le déplacement de la fractale avec les flèches
  • Le rendu dans 6 palettes de couleurs différentes
  • Un color shift lors du zoom
  • L'intégration de la fractale de Burning Ship et d'autres fractales de l'ensemble de Julia.

Mon intégration du multi-threading a été la première que j'ai fait, et il y a certainement des problèmes de data-race que je n'ai pas vu. Cependant, le projet fonctionne bien, et je suis très fier du résultat. J'ai également appris beaucoup sur les performances et l'optimisation en C, et j'ai pu appliquer ces connaissances dans d'autres projets, notamment sur Cub3D.

Les palettes de couleurs ont été générées de manière procédurale, notamment grâce à cet excellent article de Inigo Quilez, Simple color palettes. Pour comprendre comment réaliser les fractales, j'ai au préalable implémenté l'ensemble de Mandelbrot en Python avec Matplotlib, puis une fois les calculs compris j'ai refait le tout en C.

J'ai réalisé le projet en deux mois, et j'ai obtenu la note de 125/100. Il est disponible sur mon GitHub.

Galerie

Ma fractale "Baobab" animéeBurning ShipMandelbrot