Voila un petit moment que je voulais implémenter ce bel algo qu´est le marching cube.
http://perso.numericable..fr/~fvirtman/progs/mcubes.zip
Le principe est simple : vous définissez mathématiquement l´espace par des volumes de bases.
Par exemple, vous dites que vous voulez une sphere de tel rayon a un endroit de l´espace.
Vous dites que vous voulez ajouter un Cone.
Vous dites enfin que vous voulez retrancher un cylindre (c´est a dire que vous posez dans l´esapce un cylindre invisible qui enleve la matiere)
Ainsi, par exemple, un cube troué, c´est un cube moins un cylindre.
Et pour un point x,y,z donné, vous savez si vous etes dans la matiere ou non.
Cela est sommairement l´arbre CSG.
Le marching cube est l´algo qui, a partir d´une fonction qui dit, a x,y,z donné, si on est dans la matiere ou non, vous pond une triangulation.
La finesse de la triangulation peut etre réglée.
Voici une petite implémentation de cela (une premiere version), regardez juste le main pour comprendre comment ça fonctionne ! et les autres fichiers pour voir le détail...
c´est le principe du logiciel povray non?
J´ai vu (en surface) ça en licence, c´est le dernier mode de représentation qu´on a abordé dans un cours d´intro a la synthese d´image. J´avoue que c´est pas une representation qui me parait intuitive, peut-etre pourras-tu m´informer sur l´interet de se mode de representation par rapport a d´autre (gain de place, vitesse de traitement,...)
C´est ce qu´il me semblait concernant le ray tracing, ca optimise donc bien les calculs.
LGV avait fait un bon document/implementation des marching cubes, mais je suis sur qu en voyant le titre du poste il viendra par ici.
Enfin bon, on peut mieux faire au niveau optim :P (vive les marching cubes sur whirpool 1200)
Vi, au niveau optim, j´ai pas encore bien optimisé : pour chaque cube, je recalcule ses 8 sommets, alors que quand je passe au suivant, j´aurais pu garder le résultat précédent !
Voir calculer tous les points une fois pour toutes, mais bon, pour le moment, c´est un premier jet
guyver2 > La représentation CSG est idéale pour tout ce qui est lancer de rayon en effet !