L3IF Images
année 2004-2005
http://www710.univ-lyon1.fr/~jciehl/
TD2 - Modélisation
L'approche naturelle pour une application openGL
consiste à décrire la surface des objets sous forme de
maillages composés généralement de triangles. La
plupart des modeleurs permettent de créer ce type de
représentation. L'affichage est ensuite particulièrement
simple : un seul appel à glDrawElements suffit dans la plupart
des cas.
Nous allons nous interesser aujourd'hui à une
autre représentation : les surfaces implicites ainsi que leur
visualisation avec openGL.
Partie 1 : Surfaces implicites et potentiels
Dans sa forme la plus simple, une surface implicite est
générée par un point, une fonction et un seuil. Par exemple :
F(x,y,z) = x2 + y2 + z2 + C
L'ensemble des points tels que F(x, y, z) = S, un
seuil, définissent la surface implicite
générée par (0, 0, 0), F et le seuil S. Dans ce
cas, la surface sera une sphère.
S'il est immédiat de choisir un point, une
fonction et un seuil, il est par contre plus difficille de visualiser
ce type de surface. Il y a deux solutions envisageables : mailler la
surface ou construire une énumération spatiale. La
solution la plus simple à mettre en oeuvre pour un type
quelconque de fonction est sans doute l'énumération
spatiale.
Lorsque l'on définit plusieurs points, il est
possible de décrire des objets assez surprenants de
manière très simple.
Plus formellement :
soit Pi(xi, yi, zi), un générateur
définit par un point (xi, yi, zi) et une fonction Fi(x, y, z).
soit F(x, y, z) la somme des n fonctions Fi(x, y, z)
associées à chaque générateur. Une surface
est définie par l'ensemble des points vérifiants F(x, y,
z) = S, pour S un seuil fixé.
Les fonctions Fi(x, y, z) sont construites par
composition d'une fonction de distance di(x, y, z) et d'une fonction de
potentiel fi(d). La fonction de distance définit la relation
entre un point quelconque P(x, y, z) et un générateur
Pi(xi, yi, zi). La fonction de potentiel fi(d) définit le
potentiel associé à une distance.
Construire un objet revient à choisir une
fonction de distance, une fonction de potentiel et un ensemble de
points générateurs. Il est également assez simple
d'utiliser d'autres éléments géométriques
comme générateurs : segment, polygone, tant qu'il est
simple de calculer la distance entre un point et le
générateur.
On peut utiliser la distance euclidienne pour di(x,
y, z)= distance entre Pi(xi, yi, zi) et (x, y, z), et f(d)= .5 exp(p -
4pd2). Le paramètre p permet de régler la pente de la fonction pour d=.5 et de modifier l'aspect de la surface.
Parcourez l'article "Extended Field Functions for Soft Objects" (partie1 partie2)
pour plus de détails et des exemples de
générateurs et d'objets engendrés. L'article
précise également un algorithme dans le cas 2D, pour vous
aider à comprendre le principe de calcul.
Il est également possible de définir
la manière dont plusieurs fonctions se mélangent et de se
rapprocher des notions ensemblistes d'union, d'intersection ... cf. http://pages.cpsc.ucalgary.ca/~blob/pdf/barthecsg.pdf
Partie 2 : Visualisation par énumération spatiale
L'idée est de construire un ensemble de
cellules (régulières ou non) représentant le
volume d'un objet ou sa surface. Construisez, dans un premier temps,
une grille régulière englobant une surface implicite
à visualiser. Il suffit de parcourir toutes les cellules de la
grille et de ne retenir que celles dont les 8 sommets appartiennent
à l'objet implicite (F(x, y, z) < S, par exemple).
Une approche hiérarchique sera certainement
plus efficace. Le principe de construction d'un octree est identique
à celui de la grille régulière. Un noeud est
retenu lorsque ses 8 sommets appartiennent à l'objet implicite.
Il faudra alors descendre dans la hiérarchie
récursivement jusqu'au niveau de représentation
souhaité.
Vous pouvez appliquer ce principe à la
visualisation d'un objet implicite ou essayer de mailler directement sa
surface (cf. documents).
Documents :
Que sont les F-Rep ?
Aurélien Barbier Mémoire de DEA
Eric Galin
Christophe Schlick
Introduction aux surfaces implicites partie1 partie2
Implicit Sweep Object
Manipulations ensemblistes
Maillage adaptatif d'objets implicites