lundi, mai 07, 2007

Voilà quelques captures du projet sur lequel je codouille dans mes moments de lassitude. Il s'agit d'un graphe de scènes, semblable par exemple à Open Scene Graph. La différence vient de ce que le mien est un graphe fonctionnel pur, écrit en Ocaml.

Fonctionnel pur, c'est à dire que chacun des nodes du graphe est immutable (pour ceux que le C++ parle plus, cela revient à n'avoir que des classes aux méthodes et attributs constants). Cela veut dire également qu'à chaque changement, il faut reconstruire le graphe. Cela peut sembler vaguement inefficace, mais c'est en tous cas très pratique à programmer. La garantie, une fois que le noeud a été crée, qu'il ne changera pas, permet une forte réutilisation du graphe. De plus, il y a un noeud spécial qui permet de placer les noeuds fils dans une liste compilée, afin d'accélérer le rendu. Enfin, (mais ce n'est pas lié à la contrainte de fonctionnalité pure), le GC d'Ocaml aide beaucoup à ne pas se soucier des problèmes mémoire. Pour comparaison, le compteur de références d'Open Scene Graph est un poil compliqué à utiliser au premier abord, et il est trop facile de faire des erreurs.

On verra bien ce que cela donnera et si j'arriverai à en faire quelque chose!






Here are a few screen captures of the project on which I am vaguely working now at my idle time. This is a scene graph, similar for example to Open Scene Graph. The difference is that mine is a purely functional graph written in Ocaml.

Purely functional means that each node of the graph is immutable (for those more on the C++ side, it would be more or less equivalent to have classes with only constant methods and attributes). It means that for each change of the scene, the graph needs to be reconstructed. It can seem inefficient, but it is very easy to program with such a data structure. The guarantee that once a node has been created, it will not change during its lifetime, is extremely useful for reusing entire pieces of the graph. In addition to that, I've created a node that creates a compiled list of the children nodes, to accelerate rendering. Finally (but that's not related to the purely functional side of the things), Ocaml's GC helps a lot for all the complex memory issues that arise with a complex graph. By comparison, the reference counter used in Open Scene Graph is slightly complicated to understand, and quite error-prone.

We'll see how it will evolve, and if I'll be able to do something out of this!

2 commentaires:

Anonyme a dit…

Sympa ... Comment est modelise le vaisseau ?

M87 a dit…

Blender, bien sûr :)

Un pavé, subdivisé pour avoir de quoi travailler dessus, ailes extrudées, puis sub-surface et ajustements mineurs pour avoir un beau nez et un aileron!