Fractalino

1.0

By bfx, 5 years ago

Controls: D-Pad: [Arrows / WASD] - A: [J] - B: [K] - Menu: [U] - Home: [I]
Enjoy games at full speed with sound and lights on the Gamebuino META!
Emulator by aoneill

Ceci est ma toute première contribution! Avec Fractalino vous pouvez explorer l'ensemble de Mandelbrot, fonction fractale du plan complexe.

Comment contrôler Fractalino:

  • Joypad : déplacer le point de vue haut / bas / gauche / droite
  • Boutons A / B : Zoom avant / arrière
  • Boutons Menu+A : Changer le dégradé de couleurs 1
  • Boutons Menu+B : Changer le type de fractale
  • Boutons Menu+Gauche: Changer le dégradé de couleurs 2
  • Boutons Menu+Droite: Changer le type de rendu intérieur
  • Boutons Menu+Bas: Changer le type de rendu extérieur
  • Boutons Menu+Haut: Changer la limite ou l'épaisseur des pics

L'affichage se fait en haute définition en utilisant directement les fonctions gb.tft (donc le rendu est très fin mais il n'est pas possible de sauvegarder d'image, pour l'instant). Le calcul est fait avec des nombres à virgule fixe (sur 32 bits dont 26 après la virgule) tant que le niveau de zoom n'est pas trop élevé, puis passe aux calculs sur 64 bits en virgule fixe (depuis la version 0.2) automatiquement (donc le rendu devient légèrement plus lent à fort niveau de zoom).

Pour des raisons de performance et de maniabilité, après tout mouvement de l'observateur, l'écran est rafraîchi en plusieurs passes de plus en plus précises. Ainsi il suffit d’arrêter de toucher les boutons pour laisser l'affichage se terminer, ou recommencer à n'importe quel moment pour interrompre l'affichage en cours et bouger plus loin.

Le mieux est d'essayer!

Version 0.1: version initiale
Version 0.2: type 'double' remplacé par 'int64_t' et adaptation des calculs, gain de performance a fort zoom
Version 0.3: transformation du code vers un design plus orienté objet, nouvelles classes Viewer et Screen, utilisation généralisée de l'objet Complex réduisant les transformations utilisant 'double', donc petit gain de performance
Version 1.0: refonte générale, addition de différents types de fractales, addition des "orbit traps" pour créer des pics et remplir l'intérieur, remplacement des calculs sur des complexes par des calculs en virgule fixe sur des types simples (sans macros et avec plus d'opérateurs redéfinis), utilisés dans des templates

Le code est un festival des possibilités du C++ pour la programmation orientée objet! Il y a des templates (classes définies autour d'un type de données en paramètre), des fonctions virtuelles implémentées par des sous-classes, des redéfinitions d'opérateurs mathématiques +, -, *, /, cast, etc, sur la classe de calculs en virgule fixe, du polymorphisme. Et tout ça sur un micro-contrôleur!

Quelques images (captures d'écran sur l'émulateur, pas possible de sauver les images en HD):