[Algorithmique] Voxels et prise de gueule... chaud chaud chaud

Voxels et prise de gueule... chaud chaud chaud [Algorithmique] - Programmation

Marsh Posté le 08-05-2001 à 15:27:10    

Je vous explique mon probleme : j'ai un volume defini par un ensemble de voxels, c'est-a-dire des cellules delimitees par 8 points formant les sommets. Une valeur est attribuee a chacune de ces cellules.
Ces cellules ne sont pas cubiques, ni parellelepipediques, elles sont assez quelconques (en fait ce sont des cubes deformes, mais de maniere assez aleatoire).
 
Je desire afficher ce volume en temps reel en utilisant les textures 3D d'OpenGL, pour cela il faut que je definisse une texture 3D ce qui n'est rien d'autre qu'une matrice 3x3 de voxel-values, ou encore un cube dans l'espace defini par des voxels tous cubiques et de meme taille.
 
Donc voila mon probleme : transformer tous les voxels quelconques en une serie de voxels cubiques identiques.
 
J'ai deja ecrit un premier algorithme, mais celui-ci est tres lent :
Pour chaque voxel cubique,
(1) Determiner le voxel quelconque le plus proche
(2) Faire une interpolation trilineaire des valeurs des voxels quelconques les plus proches pour determiner la valeur du voxel cubique
 
Resultat : l'etape (1) est en O(n), donc mon algo est en O(n^2).
Sachant que mon dataset comporte quelque chose comme 50000 voxels, ca prend un temps incroyable (environ 2h sur mon Xeon 550).
 
Je desirerais implementer quelque chose de plus rapide. Toutes les propositions sont les bienvenues :hello:

 

[edit]--Message édité par tgrx--[/edit]

Reply

Marsh Posté le 08-05-2001 à 15:27:10   

Reply

Marsh Posté le 08-05-2001 à 17:19:40    

:cry: ... :bounce:

Reply

Marsh Posté le 08-05-2001 à 18:13:38    

Tu pourrais découper ton espace en cubes, chaque cube pouvant contenir plusieurs de tes volumes.
 
Donc pour chaque voxel, tu regardes à quel gros volume cubique il appartient et tu restreints donc le nombre de voxels sur leque travailler.
 
Evidemment il faut aussi tenir compte des voxels sur les bords et regarder les optimisations possibles (choix de la taille des cubes).

Reply

Marsh Posté le 08-05-2001 à 18:42:31    

Le seul probleme est qu'ensuite je compte afficher la texture 3D, donc je n'ai pas interet a perdre de l'information sur mes voxels pour avoir une bonne qualite d'image.
Donc en fait au final ma matrice cubique aura tendance a avoir plus de voxels que les voxels foireux originaux...
 
et donc : :cry:

Reply

Marsh Posté le 08-05-2001 à 18:45:04    

Non les cubes, c'est en plus !
C'est juste pour ranger différemment les voxels, ils n'ont aucune réalité.

Reply

Marsh Posté le 08-05-2001 à 18:45:51    

Ah oui... (je seche mes larmes)
 
C'est pas bete du tout... diviser pour regner donc...
Merci Verdoux

Reply

Marsh Posté le 08-05-2001 à 18:51:10    

D'ailleurs, tu peux aussi jeter un coup d'oeil sur les BSP tree, c'est pratique pour partitionner l'espace.  
Par contre il faut faire gaffe aux voxels dont les voisins seraient dans une autre partition.

Reply

Marsh Posté le 08-05-2001 à 18:56:00    

C'est peut etre un peu bourrin un BSP pour ce probleme non ? mais c'est vrai que ca reduirait la complexite a O(n.log n)...
 
Merci pour toutes ces precisions, auxquelles je n'ai meme pas pense une seule seconde...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed