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...).


Excellent ! Je joue avec depuis 5 min pour comprendre le comportement des bestioles haha...
Bon, faut en avoir l'idée, mais même si j'avais eu envie de faire un truc dans le genre, j'aurais été incapable de savoir par où commencer. J'essairai de me cultiver un peu ce soir en jetant un coup d'oeil aux sources, et en attendant je te tire mon chapeau pour ce bel exemple.
Ludique et intelligent, ça donne envie de "s'amuser" à nouveau.
Pour info, tu peux nous expliquer comment sont censés réagir les différents bidules aux interactions de l'utilisateur ?
Side Note : L'appli est très fluide je trouve, presque plus qu'une textbox silverlight... Allez donc comprendre !
Bravo en tout cas :)
Rédigé par: Romain Verdier | 05 janvier 2009 à 12:01
Merci ça me va droit au coeur :)
Les bestioles (CtrlCylinder)ont peur de la souris : elles se rétractent à son arrivée et tentent de se fondre dans le décors en prenant la teinte de l'arrière-plan (oui c'est dérisoire mais la nature est ainsi faite :)
Les bestioles ont la mémoire courte : quelques secondes après la venue de la souris, leur unique tentacule (CtrlHair) ressort prudemment.
Les bestioles pondent : quand le courant est faible, un oeuf (CtrlEgg) se forme au bout de leur appendice. Il se détache dès que le courant est un peu fort. S'en suit une période d'infertilité (m_timeToEgg)pendant laquelle la bestiole ne plus pondre, la pauvre.
Pour corser le tout, le curseur de la souris crée une source de courant. Si on clique, cette source se transforme en puit, un aspirateur en somme.
Un des points d'entrée pour comprendre le code est la classe CtrlThings1 et sa méthode OnCtrlLoaded... Pff ca me parait impossible de tout expliquer là comme ça (et typepad devrait faire ses textarea encore plus petites). En revanche si je peux éclaircir des points précis n'hésite pas je le ferais avec plaisir.
Rédigé par: DenisDollfus | 05 janvier 2009 à 23:30
Dear Denis.
Thaks a lot for yuor nice blog and information. I wish I could undestand French. Your Sealver Algea application is very very attractive. Supper job Man!
Could you please also provide English translation of yuor blog?
Rédigé par: Alex | 22 mars 2009 à 02:09