(In english below)
Je travaille joue depuis quelques semaines avec Silverlight pour faire un machin inutile mais amusant, une animation inqualifiable, assez marine quand même, et qui amène une proposition de réponse au problème d'agiter en temps réel des objets munis d'une masse dans un champ de vecteurs 2D fonctions du temps qui modélise le courant. La difficulté principale est de calculer le moins souvent possible le champ de courant, qui peut être une fonction lourde, typiquement trigonométrique pour des effets de houle.
Le principe est que chaque objet s'abonne aux champs, et que ceux-ci sont triangulés : les valeurs exactes sont calculées à chaque point du triangle, toutes les autres valeurs sont calculées par interpolation linéaire des extrémités des triangles, aux positions des abonnés.
Vous pouvez jouer vous aussi en cliquant là (ne faites pas trop peur aux bestioles avec votre souris svp).
J'hésite à vous laisser les sources en l'état (code mort et/ou commenté), mais je n'ai pas le temps de les peaufiner. Donc si jamais ça vous inspire, les sources pour Visual Studio 2008 sont au bout de ce lien. A noter qu'il y a deux sous-projets qui compilent les mêmes sources, l'un pour Silverlight l'autre pour WPF, pratique pour optimiser le code avec le profiler de Visual Studio.
Inutile de vous dire qu'on peut faire mieux à divers point de vue. A ce propos si vous voulez un moteur de rendu physique complet pour Silverlight (et XNA), voyez du côté de Farseer, c'est du sérieux.
Quand même, réinventer la roue, quel plaisir !
English abstract
This small application is a simple attempt to animate objects in a field of forces that mimics hydrodynamics. Forces are computed on a publisher/subscriber pattern -- objects subscribe to fields, and fields are triangulated to avoid heavy computation of trigonometric functions on too many points of the 2D space.
See it running here, and download the source code if you really need it (which is an eternal draft, refactor as needed...).
Les commentaires récents