• Aucun résultat trouvé

Interprétation de silhouettes de terrain

5.3 Interprétation de silhouettes de terrain

Notre système est un outil de modélisation par croquis. L'utilisateur peut utiliser une tablette graphique ou une souris pour saisir des courbes 2D qui correspondent aux silhouettes du terrain qu'il souhaite modéliser. Nous qua-lions notre système de multi-trait car au lieu de reconstruire les traits de silhouette les uns après les autres comme cela est fait dans [37][77][44] nous avons pris le parti d'interpréter un croquis constitué de multiples trait de silhouettes comme dans [46][47]. L'avantage de considérer un croquis com-posé est que l'on peut analyser les relations entre les traits pour en extraire plus informations qu'avec un seul trait. L'inconvénient est qu'il est souvent complexe voir impossible d'interpréter un croquis à cause de la diversité d'in-terprétations qui peuvent exister.

Dans cette section nous utilisons des connaissances apriori sur les terrains pour simplier drastiquement l'interprétation des relations entre les traits de silhouettes. Ces simplications nous permettent de trier les silhouettes par rapport à leur profondeur en complexité sous-quadratique/linéarithmique. De même nous caractérisons les relations qui relient les extrémités de chaque silhouette au reste du dessin.

5.3.1 Ordonnancement des traits de silhouettes

Pour structurer le croquis on cherche à déterminer quelle silhouette se trouve devant quelle autre, c'est à dire ordonnancer les traits de silhouettes. Pour cela il convient de commencer par observer les silhouettes de paysages réels. La première observation que l'on peut faire est que les silhouettes de terrain comportent rarement des surplombs. Et en l'absence de surplombs, une sil-houette de montagne ne se recouvre pas quand on la projette sur la ligne d'horizon. Comme le terrain que nous générons est une carte d'élévation on peut, sans trop perdre en généralité, ignorer les surplombs. Cette propriété de projection injective de la silhouette sur l'horizon permet de réduire l'or-donnancement des silhouettes à un balayage gauche/droite de l'écran. Si l'on observe maintenant les silhouettes, perpendiculairement à la ligne d'horizon on peut armer que si une silhouette de situe au dessus d'une autre c'est qu'elle est plus éloignée.

112 CHAPITRE 5. MODÉLISATION DE TERRAINS PAR CROQUIS L'algorithme que nous proposons pour trier les silhouettes consiste donc à projeter les traits sur la ligne d'horizon, de manière à pouvoir les balayer de gauche à droite. De cette manière on réduit la dimensionnalité de notre pro-blème à un. Durant le balayage, à l'abscisse x, on considère à chaque moment la liste des traits présents en x (Fig 5.1, partie basse). Quand un nouveau trait est inséré dans la liste on regarde quels traits se trouvent au dessus et en dessous de lui et on l'insère entre les deux. Pour balayer, l'opération la plus couteuse est de trier par abscisse croissante les extrémités gauches et droite des silhouettes au début de l'algorithme. Ensuite chaque insertion de nouvelle silhouette dans la liste triée se fait en temps logarithmique. L'algorithme est donc particulièrement ecace.

Avant de lancer l'algorithme de balayage on ltre les silhouettes pour sup-primer les surplombs, ré-échantillonner et segmenter (Fig 5.1, partie haute). La segmentation sert à introduire des points de contrôle qui pourront être manipulés par l'utilisateur.

5.3.2 Étiquetage des relations

Ordonner les silhouettes en fonction de leur profondeur n'est pas susant pour positionner les silhouettes en 3D. Pour cela nous devons aussi quantier la diérence de profondeur entre les silhouettes. Les extrémités des silhouettes nous permettent de faire cela selon qu'elles sont occultées ou reposent sur d'autre silhouettes.

Occultation : L'occultation d'une silhouette par une autre s'observe faci-lement au niveau de l'extrémité de la silhouette occultée car elle fait appa-raitre une arête en T (Figure 5.1, relation de la troisième ligne), la patte du T pointant vers le haut. Grâce à l'occultation nous pouvons connaitre l'ordre entre deux primitives ; l'occultée se trouve derrière. Quantier la distance qui sépare les deux silhouettes est dicile car elles peuvent être très proches comme très éloignées.

Naissance d'une silhouette : A l'opposé si une extrémité de silhouette n'est pas occultée cela veut dire que cette silhouette nait en ce point du terrain. Nous pouvons déduire que la profondeur de l'extrémité est égale à

5.3. INTERPRÉTATION DE SILHOUETTES DE TERRAIN 113

114 CHAPITRE 5. MODÉLISATION DE TERRAINS PAR CROQUIS la profondeur du terrain en ce point. La silhouette qui se trouve directement au dessus de l'extrémité est alors la silhouette qui se trouve juste derrière. Pour ce qui est de quantier la distance séparant les silhouette arrière de l'extrémité nous pouvons faire des hypothèses sur la forme de la silhouette arrière. Cela est expliqué dans la partie Génération de la géométrie.

Trois types de relations et leur calcul able pendant la balayage : Les extrémités peuvent être étiquetées de 3 manières diérentes : OCCUL-TÉE_PAR, REPOSE_SUR et JONCTION_TRIPLE. Le calcul des rela-tions se fait pendant le balayage, au moment de l'ajout ou du retrait d'une extrémité. À cet instant nous connaissons la liste des traits présents au ni-veau de cette abscisse. Si l'ordonnée est trop éloignée de tout autre silhouette alors on considère que c'est une silhouette naissante : REPOSE_SUR. Si l'or-donnée de notre extrémité est proche d'une silhouette présente on regarde la silhouette un peu plus loin pour voir si elle part au dessus ou en des-sous. Si elle part au dessus alors c'est une relation OCCULTÉE_PAR, sinon c'est une relation JONCTION_TRIPLE. Regarder un segment plutôt que ponctuellement rend la détection plus stable.

La partie droite de la gure 5.1 montre un exemple de balayage et illustre la détection des types de relation.