• Aucun résultat trouvé

Le principe de ScrutiCam est d’analyser la surface autour du point sélectionné par l’uti-lisateur afin de calculer une “vue cible” appropriée. Ensuite, l’util’uti-lisateur pourra, en fonction de ses mouvements sur l’écran, se déplacer progressivement vers cette vue cible.

La section 6.2.1 décrit les données que nous extrayons de l’analyse de la surface du voi-sinage et comment nous les utilisons pour calculer la vue cible. La section suivante détaille les contrôles possibles ainsi que les mouvements de caméra associés.

58 Chapitre 6 – Manipulation semi-automatique de caméra 3D

6.2.1 Analyse de surface

Beaucoup de techniques de manipulation de caméra basent leurs calculs sur la position du centre du modèle étudié. C’est le cas de la technique du trackball, où le centre du modèle est utilisé comme point de pivot de la caméra virtuelle. Certaines techniques de déplacement utilisent aussi la distance entre la caméra et le centre de modèle pour calculer une vitesse de déplacement appropriée. Cependant, une telle stratégie peut ne pas être optimale. C’est le cas lorsque l’on travaille sur des modèles aux dimensions disproportionnées, un grand bâtiment par exemple, ou sur de très grands modèles, comme un terrain. Dans de tels cas, le centre du modèle peut être situé très loin du centre d’intérêt sur lequel l’utilisateur est concentré. Ceci risque de produire des mouvements de caméra inappropriés car trop rapides ou inattendus.

Un des principes de ScrutiCam est de considérer la surface visible du modèle 3D afin de calculer les mouvements de caméra. L’analyse de la surface visible du modèle peut fournir des informations utiles comme les vecteurs normaux à la surface, représentés sur la Figure 6.4, ou la présence d’arêtes ou de contours. Ces informations permettront de calculer une vue adaptée à la visualisation de la surface considérée.

FIGURE6.4 – Les vecteurs normaux à une surface 3D.

Contrairement à HoverCam, qui analyse la surface du modèle dans la direction du mouvement de la caméra, ScrutiCam laisse à l’utilisateur le choix de son point d’intérêt, qu’il sélectionne par un simple clic. L’algorithme de ScrutiCam analyse alors le voisinage de ce point d’intérêt afin de calculer un vecteur normal moyen (c’est à dire l’orientation moyenne de la surface dans le voisinage du point cible), de détecter la présence de contours et de calculer leur éventuelle orientation. La méthode utilisée pour estimer le vecteur normal moyen ainsi que pour détecter la présence de contours est détaillée dans la section 6.3

Le fait de prendre en considération le voisinage du point d’intérêt possède des avantages intéressants. Tout d’abord, ceci permet de “lisser” les surfaces irrégulières. En effet, si la continuité de la surface du modèle n’est pas C1, l’angle entre deux vecteurs normaux proches peut être grand. Dans ce cas, deux points cibles proches l’un de l’autre produiraient des caméras cibles très éloignées l’une de l’autre. La Figure 6.5 (gauche) montre ce problème, qui serait très perturbant pour l’utilisateur qui ne serait pas en mesure de prédire où la caméra se placerait. En considérant le voisinage dans les calculs, ce problème est résolu (voir Figure 6.5 (droite)).

Enfin, la présence d’arêtes et de contours dans le voisinage du point d’intérêt donne des informations sur la discontinuité de la surface ou sur la présence d’autres objets proches de la zone d’intérêt. Par conséquent, si un contour est détecté dans le voisinage, nous utilisons

59

FIGURE6.5 – Problème provoqué par l’utilisation du vecteur normal des faces. A gauche, la caméra utilise le véritable vecteur normal de la surface. A droite, nous prenons en compte le voisinage du point cible pour lisser les mouvements de la caméra.

cette information pour produire une caméra cible qui fait face à ce contour, afin d’avoir une bonne vision de celui-ci.

6.2.2 Calcul de la vue cible

A partir des données extraites de l’analyse de la surface, nous calculons une caméra cible Ct, c’est à dire une position Pt, une direction de vueDtet un vecteur HautUtpermettant une bonne visibilité de la zone d’intérêt.

Position cible Pt

La caméra cible doit faire face à la zone pointée par l’utilisateur. Par conséquent, elle sera placée le long de la demi-droite [TN ), où T représente la position du point cible etN le vecteur normal moyen calculé à partir de l’analyse de la surface.

Nous choisissons de conserver la distance d entre la caméra et le point cible T fixe. Par conséquent, la position de la caméra cible sera donnée par l’équation suivante :

Pt= T + d ∗N . (6.1)

Direction cible Dt

De même, étant donné que Ctdoit faire face au point sélectionné, la directionDtsera égale à l’opposé du vecteur normal moyenN :

−→

Dt= −N . (6.2)

Vecteur haut cible Pt

Enfin, il nous faut également calculer un vecteur haut (up vector en anglais) cible, qui dé-finira l’orientation de la caméra, et qui désigne la verticalité. Il y a plusieurs choix de

vec-60 Chapitre 6 – Manipulation semi-automatique de caméra 3D

teurs “haut” possibles. L’article décrivant la technique HoverCam (Khan et al., 2005) identifie quatre modèles de vecteur haut :

– Global Dans le modèle global, la notion de “haut” est donnée par la direction du Pôle Nord. Ainsi, quelle que soit la position de la caméra sur le globe, le Pôle Nord sera toujours vers le haut de l’écran. Si l’utilisateur dépasse le Pôle Nord, la caméra effectue alors une rotation de 180°.

– Local Ce modèle dépend de la vue courante de l’utilisateur et est toujours dirigé vers le haut de la fenêtre de vue. Dans ce cas, si l’on dépasse le Pôle Nord, la Terre apparaîtra à l’envers.

– Dérivant Ce modèle oriente le vecteur Haut dans la direction du mouvement. On peut comparer ce modèle au pilotage d’un avion.

– Personnalisé Enfin, certains objets nécessitent l’utilisation de vecteurs Haut particuliers. Par exemple, dans le cas de l’observation d’un modèle de voiture, il apparaît normal d’avoir un vecteur Haut pointant vers le haut de la voiture lorsque l’on observe les cotés de celle-ci. Par contre, lorsque l’on observe par dessus ou par dessous, il peut être plus approprié d’avoir le haut pointant vers l’avant de la voiture.

Nous avons seulement retenu les modèles Global, Local et Personnalisé. L’utilisateur peut changer de modèle de vecteur Haut à travers les paramètres de l’application.

6.2.3 Contrôle et mouvements de caméra

Les mouvements de ScrutiCam sont contrôlés en effectuant un “cliquer-glisser”, c’est à dire en cliquant sur le point cible et en le déplaçant tout en maintenant le bouton gauche de la souris enfoncé. Cette approche est fréquemment utilisée dans les applications afin, par exemple, de déplacer des icônes ou de dessiner une forme. De plus, ce geste est tout à fait adapté aux écrans tactiles car il profite de la co-localisation du doigt et du curseur, comme le suggère le principe deCOLOCALISATION. Par conséquent, la manipulation est plus directe et semble plus intuitive.

Nous voulions que ScrutiCam utilise cette co-localisation. De ce fait, la zone sélectionnée par l’utilisateur reste constamment sous son doigt lors de la manipulation.

Dès que l’utilisateur sélectionne son point d’intérêt, une caméra cible est calculée, ainsi qu’une trajectoire allant de la caméra courante à la caméra cible. Cette trajectoire est une interpolation linéaire de la position et de l’orientation de la caméra. Ainsi, la position de la caméra sera interpolée entre sa position courante P0 et sa position cible P1, à l’aide de la formule suivante :

P (t) = P0+ t ∗ (P1− P0), t ∈ [0; 1] (6.3) Afin de déplacer la caméra le long de la trajectoire, le paramètre t doit donc varier entre 0 et 1 (voir Figure 6.6). Si nous analysons la position du point cible à l’écran, nous remarquons que :

– à t = 0, la position à l’écran du point cible correspond à la position initiale du point sélectionné.

– à t = 1, la caméra est face au point sélectionné. Par conséquent, le point sélectionné est situé au centre de l’écran.

Ainsi, afin de conserver la relation entre la position du point d’intérêt et la position du curseur, le paramètre t est contrôlé par la distance entre la position initiale du curseur et le