Dfi BuddhaBrot, Qt 2010, Pierre Schwartz (khayyam90)

Aprs avoir tudi le code propos par Yan pour son gnrateur, je me suis lanc dans ma propre implmentation sans reprendre aucun extrait de son gnrateur. 
La premire chose  faire a t de dfinir l'abstraction de fractale qui permettrait de gnrer plusieurs fractales diffrentes. Ce fut vite rsolu en implmentant un hritage de classe. Le mme principe a t ensuite repris pour le codage des colorations.
L'affichage des fractales fut rapidement obtenu. J'ai ainsi pu rapidement proposer le support de quelques fractales du gnrateur de Yan + ajouter les miennes comme le MultiBrot

Internationalisation
L'utilisation ds le dbut des macros tr() permet de grer l'internationalisation  moindre frais, a serait une erreur de ne pas l'utiliser

Optimisations
Outre l'utilisation de conteneurs en accs rapide O(1), l'utilisation de dcalages de bits pour stocker une valeur RGB sur une grandeur scalaire, j'ai mis en oeuvre la simplification par symtrie. Si une fractale est dfinie comme symtrique, le gnrateur n'aura besoin que de la calculer  moiti.

Design
Etant plutt orient sur le dveloppement web, je n'ai eu aucune difficult  dvelopper un design spcifique (style.qss) qui s'appuie fortement sur la syntaxe CSS.

QSCript
L'ajout du support des colorations scriptes a vraiment t le dpart de l'extensibilit de ma solution, chacun peut dsormais apporter ses propres modes de coloration sous la forme d'un fichier ecma/script, trs proche des implmentations JavaScript ce qui n'tait videmment pas pour me dplaire.

QThread
Bien que n'ayant pas d'environnement multi-core, les autres participants exposaient leur solution multithreade, il m'en fallait donc aussi une. Elle a ncessit quelques remaniements dans le code pour bien extraire la logique  parallliser. Le positionnement de mutex ds le dbut m'a protg de tous les dsagrments que l'on peut imaginer.

QNetwork
Le rendu distribu pouvait se faire de 2 manires : rimplmenter la logique d'coute rseau pour dvelopper un serveur, dvelopper le traitement multi-clients, grer le load balancing ... ou bien simplement utiliser un serveur web existant (Apache par exemple). Il suffisait alors de pouvoir lancer une gnration d'image en ligne de commande et d'crire une passerelle front-end web d'accs au binaire : le webservice PHP tait n.
Generate.php doit tre adapt pour utiliser le binaire d'excution, revoir le chemin en consquence.
Du point de vue de l'application, l'utilisation du rseau a ncessit l'criture de widgets de slection spcifiques : les NetworkInputs. 

Plugins
L'extensibilit par Script n'tant pas des plus rapides (et aussi pour en mettre plein la vue), j'ai dvelopp le support des plugins de fractales. Chacun peut dsormais venir avec ses propres fractales pour les gnrer dans l'application.

Srialisation
J'ai mis en oeuvre la srialisation Qt pour stocker et relire un jeu d'options de gnration dans des fichiers binaires que j'ai modestements suffixs .dvp. Il est dsormais possible de rcuprer une configuration prcdemment trouve.

3D
Fait dans les derniers jours, le MandelBulb (seule fractale 3D propose)
L'hritage des fractales dfini prcdemment ne convenait plus pour la gestion de fractales 3D (std::complex<float> tait incompatible avec la 3D), j'ai du redfinir la notion de point 3D, les oprateurs lis, les oprations gomtriques de base ...
Le rendu 3D n'est pas multithread par manque de temps. J'ai utilis un cas trivial de rendu et de projection : projection orthographique le long de l'axe -z. J'y ai adjoint un mode d'clairage 3D permettant de simuler les angles d'inclinaison entre la source de lumire dfinie et la camra.

Temps total de dv : ~50h sachant que je partais de 0 et que je n'avais jamais utilis Qt auparavant.