En cette froide matinée du 13 décembre 2007 (bon'anniv Patounette), j'ai eu subitement envie de jouer avec des champs d'altitudes. Pour ceux qui ne savent pas ce que c'est, j'ai déja écrit quelques explications qui sont, je pense, encore valables. Nous allons maintenant aller un peu plus loin dans l'inutile.
AH AH ! I'm running floating point computing !
Le principe est simple: nous avons une fonction matheuse et quelconque qui
calcule une altitude en fonction des coordonnées x et y
du point concerné. A partir de cette fonction, un logiciel agile construit
avec précision et recadrage un champ d'altitude qui est récupéré par un
adéquat rendu POV.
Un subtil éclairage mettra en valeur les arcanes mathématiques de notre
fonction de départ. C'est simple à comprendre, quoi...
La fonction h = f(x, y) utilisée pour cet exemple est du genre:
double fonction(int x, int y, int k) { double dx, dy, dk, val; dx = (double)x / 19.8; dy = (double)y / 18.0; dk = (double)k; val = sin(dx+dk) + cos(dy+(dx/3.333)); return val; }
Gniii ? Le concept des PtLists n'est pas encore au point, il faut attendre un peu pour savoir ce que ça va être. D'ailleurs, en fait, je ne sais pas encore ce que c'est non plus, ni comment on s'en sert.
Par contre, le premier algo crée pour fabriquer un HF à partir d'une liste de point est assez simple. Pour chaque point du champ, on cherche le point le plus proche dans la liste, et on utilise son attribut h pour l'altitude. C'est rustique...
Bon, c'est pas encore une grande réussite, il y a visiblement des soucis à cause du manque complet d'interpolation... Ceci dit, voici à quoi peut ressembler la création de la liste de points:
for (foo=5; foo<300; foo++) { x = 255 + (int)(sin(foo)*(double)foo); y = 255 + (int)(cos(foo)*(double)foo); h = (300 - foo) * 100; Image_ptl_add(ptl, x, y, h, 0); }On peut probablement arranger la chose en procédant à un petit lissage du height-field. Ce qui n'empèche pas de réfléchir à une meilleure méthode d'interpolation. Et de réviser ses maths (hein Nicolas ? tu vois bien que les maths, ça sert à quelque chose. (je cause à mon fils, là)) pour avancer vers le nirvana povisant.
Ahem, comment dire en restant gentil? Ce n'est pas encore parfait, voilà. Mais j'aime bien l'idée.
Nouvel essai... Bon, c'est pas une idée très clean. Dans un espace de coordonnées rectangulaire, forcément, ça va être un peu anguleux. Pas grave, je me lance. En avant comme avant.
Ce que vous venez de voir ne sont que des travaux préliminaires. Le champ d'exploration est large, et va probablement déboucher sur de superbes animations. Vous avez quand même un début d'explication que vous devriez essayer de comprendre avant de passer à la suite. Il faudrait un blog pour en parler. Pour suivre le mouvement, lisez le tarball et restez à l'écoute sur la tribune patatoide.