23 septembre 2026
Dessin et animation complets
Frontières, rivières, rotation du globe et fluidité retrouvée
Contexte
Le billet du 28 juillet montrait le tout premier dessin des continents avec la nouvelle base technique : C++ 23, WinUI 3 et Direct2D. Je concluais alors qu'il restait « encore beaucoup de travail avant de retrouver tout ce que la version 1 était capable de dessiner ».
J'ai donc repris le chantier en m'appuyant sur le code de la version 1 (MFC et GDI+). L'objectif était de retrouver une à une ses fonctionnalités, parfois en reprenant directement ses algorithmes. L'assistant de programmation Claude Code était à la manœuvre afin d'accélérer le développement (quelques heures de travail). Voici le détail des changements.
Ce qui a été retrouvé de la version 1
Frontières et cours d'eau
En plus des côtes GSHHS, Heclium affiche de nouveau les frontières (3 niveaux) et les cours d'eau (11 niveaux) de la base WDBII. Les traits gardent une épaisseur constante à l'écran, quel que soit le zoom. Leurs jonctions sont arrondies, pour que les tracés très anguleux de certaines frontières ne se transforment pas en pointes.
La résolution choisie selon le zoom
C'était déjà le principe de la version 1 : inutile de dessiner les côtes en résolution complète quand la Terre ne fait que quelques centaines de pixels à l'écran. Les cinq résolutions de GSHHS sont désormais chargées : grossière, basse, intermédiaire, haute et complète. La résolution est choisie selon le rayon du globe à l'écran, avec les seuils de l'époque (500, 2 000, 10 000 et 45 000 pixels). Si une résolution manque pour un niveau donné, Heclium se replie sur la plus fine disponible parmi les plus grossières.
Le zoom maximal est passé au passage de 50 à 500.
Ne parcourir que les zones visibles
Les données sont découpées en zones de longitude et de latitude : en résolution complète, 16 200 zones de 2° sur 2°. Comme dans la version 1, seules les zones susceptibles d'être visibles à l'écran sont maintenant parcourues. À fort zoom, cela représente quelques dizaines de zones au lieu de la grille entière.
Le bord du disque terrestre
Quand un continent passe derrière l'horizon, son contour doit s'arrêter exactement au bord du disque, puis le suivre jusqu'à l'endroit où il réapparaît. C'est ce que faisaient les fonctions de la version 1 qui calculaient le point de passage à l'horizon et rejoignaient deux points par un arc. Sans ce traitement, les immenses polygones comme l'Eurasie présentaient des encoches le long du bord. Le point de passage est maintenant calculé exactement, et l'arc n'est utilisé que pour les surfaces remplies. Une frontière ou une rivière disparaît simplement à l'horizon.
Faire tourner la Terre à la souris
La manipulation est la même qu'à l'époque :
- clic gauche + glisser : on attrape un point du globe et on fait tourner la Terre ;
- Ctrl + clic gauche + glisser : on déplace l'image à l'écran ;
- molette : zoom, centré sur la position de la souris.
Cela a demandé de généraliser tous les calculs, jusque-là écrits pour une vue fixe centrée sur 0° / 0°. Il a aussi fallu ajouter la projection orthographique inverse (de l'écran vers la longitude et la latitude), pour que le point attrapé reste bien sous le curseur.
Pour la première fois, l'animation est vraiment fluide, y compris sur un écran 4K. C'était déjà ce que j'espérais des progrès du matériel et du logiciel à l'époque de ma toute première version, il y a maintenant plus de 27 ans. Toujours en 2010 - donc il y a 16 ans - j'écrivais dans un précédent billet que Direct2D était une technologie prometteuse. Aujourd'hui ce n'est plus un rêve, c'est une réalité.
L'Antarctique en blanc
Comme annoncé dans le billet du 15 avril 2008, l'Antarctique et toutes les îles situées sous le 60e parallèle sud sont de nouveau affichés en blanc très légèrement bleuté. C'est un critère de latitude : il s'applique aussi aux îles australes rangées dans le niveau « terre » ordinaire, comme les Orcades du Sud ou les Shetland du Sud.
Lacs, îles dans les lacs, étangs
Comme dans la version 1, ce sont simplement des couches superposées : la terre, puis les lacs par-dessus, puis les îles dans les lacs, puis les étangs dans ces îles.
Interface
- La barre d'état indique la longitude et la latitude du point sous la souris, ou « hors Terre ».
- Une boîte de dialogue « Compléments et grille » (menu Affichage) permet d'afficher ou masquer les frontières, les cours d'eau et la grille. Elle permet aussi de forcer la résolution des frontières et des cours d'eau, ou de la laisser automatique.
Nouveautés
Grille de méridiens et de parallèles
La grille est calculée à la volée. Son pas s'adapte au zoom (de 60° à 0,1°) pour garder environ 40 pixels entre deux lignes. Seule la partie visible de chaque ligne est calculée. Les pôles ont demandé un traitement particulier : tous les méridiens y convergent, ce qui produisait des méridiens manquants ou un petit disque vide au lieu d'un point de convergence net.
Statistiques de rendu
La touche F3 affiche en surimpression le temps passé dans chaque couche (terre, lacs, rivières, frontières, grille…). Elle indique aussi le nombre de zones, de polygones et de points traités. Un résumé est envoyé chaque seconde dans la fenêtre de sortie du débogueur. Cet outil a permis de trouver les derniers problèmes de performance.
Corrections dans la préparation des données
Plusieurs défauts ne venaient pas du dessin, mais du découpage des données en zones. Ce découpage est fait une fois pour toutes à la conversion.
- Deux traits de frontière barraient la Terre d'un bout à l'autre. Deux frontières passaient directement de +180° à −180° de longitude, sans être coupées à l'antiméridien. Elles le sont maintenant avant le découpage en zones.
- L'Amérique du Nord était coupée au cordeau à 90° ouest. Le code qui détecte le passage d'un polygone par le méridien de Greenwich se déclenchait à tort dès qu'un seul point avait une longitude négative. Tout polygone situé entièrement à l'ouest était donc décalé de 360° et disparaissait des zones à l'ouest de −90°.
- L'Antarctique ne se remplissait pas jusqu'au pôle. Dans GSHHS 2.3.7, l'anneau antarctique est en plusieurs morceaux. La moitié ouest se referme correctement en longeant le pôle, mais la moitié est se referme par une ligne droite qui ne passe pas par le pôle. Il en résultait une grande diagonale parasite près de l'antiméridien, et une calotte non remplie. Tout bord anormalement long est maintenant remplacé par un détour par le pôle, une seule fois par polygone, avant le découpage en zones.
Les cinq résolutions ont été régénérées : seule la résolution complète existait jusqu'ici.
Performance
Même avec une machine puissante, il restait des cas où le dessin restait lent. Voici les principales causes, toutes corrigées :
- La grille était calculée d'un pôle à l'autre, avec un point tous les 2°, même à fort zoom. Direct2D devait alors traiter des centaines de jonctions hors de l'écran : jusqu'à 200 ms par image. Dans un autre cas, près de l'antiméridien, elle générait 3 601 méridiens. Elle ne coûte plus que 1 à 2 ms.
- Le redessin à chaque mouvement de souris. La souris envoie ses événements bien plus souvent que l'écran ne se rafraîchit. Chaque redessin attendait la synchronisation de l'écran, les événements s'accumulaient, et le globe prenait du retard sur le curseur. Le dessin est désormais fait au plus une fois par rafraîchissement d'écran.
- Les polygones qui débordent largement de la fenêtre. Au zoom 500, l'écran ne montre qu'une infime partie d'une zone de 2°. Les polygones étaient pourtant transmis en entier à Direct2D, qui les découpait en triangles, y compris hors de l'écran. Près de la Nouvelle-Calédonie, cela prenait jusqu'à 84 ms. Chaque polygone est maintenant découpé au bord de la fenêtre, avec des coordonnées calculées en double précision, avant d'être transmis. Il ne reste que 1 198 points sur 23 346, et l'image complète est dessinée en moins de 2 ms.
Ce qui reste à faire
- Au zoom initial, les cours d'eau représentent encore l'essentiel du temps de dessin (environ 11 ms sur 18). En résolution grossière, ils comptent près de 26 000 segments de deux points chacun. On pourrait les recoller en lignes continues lors de la conversion.
- La grille mérite encore quelques améliorations.
- Et surtout, le cœur du simulateur reste à écrire : l'intersection des cônes d'ombre et de pénombre avec la surface de la Terre.
Conclusion
Heclium a retrouvé l'essentiel de ce que la version 1 savait dessiner : côtes, lacs, frontières, cours d'eau, Antarctique en blanc, choix automatique de la résolution et rotation du globe à la souris. Il y ajoute une grille et une fluidité que je n'avais jamais connue. La prochaine grande étape sera enfin celle qui justifie le nom du logiciel : les éclipses.