\part{L'interface \label{interface}}
\section{Interactions élémentaires}
\paragraph{}
La première interface a été pensée pour être la plus simple possible.
L'utilisateur contrôle une caméra qui se déplace librement dans un modèle 3D.

\paragraph{}
La translation de la caméra est contrôlée par le clavier : les touches Z, Q, S,
et D servent respectivement à avancer, aller à gauche, reculer et aller à
droite (de même que les touches fléchées).

\paragraph{}
On peut pivoter la caméra de plusieurs manières :
\begin{itemize}
    \item via le pavé numérique (2, 4, 6, et 8 pour tourner respectivement vers
        le bas, vers la gauche, vers la droite et vers le haut)
    \item via la souris, comme \emph{drag-n-drop}, en cliquant un point de la
        scène et en le déplaçant
    \item via la souris, en mode \emph{pointer-lock}, comme dans un jeu video
        de tir
\end{itemize}


\section{Les recommandations}
\paragraph{}
Les recommandations sont là pour suggérer des points de vue à l'utilisateur.
Elles permettent d'aider la navigation. Elles sont affichées sous forme
d'objets 3D ajoutés à la scène. Deux affichages ont été testés.


\subsection{Les \emph{viewports}}
\paragraph{}
Les \emph{viewports} sont les affichages les plus simples : ils représentent
une caméra, avec son centre optique et son plan image.
\begin{figure}[H]
    \centering
    \includegraphics[scale=0.275]{img/new/01.png}
    \caption{Une recommandation \emph{viewport}}
\end{figure}
Cette façon d'afficher une recommandation a l'avantage d'être simple, de ne pas
beaucoup masquer le reste des modèles et suggère assez bien l'idée d'un
\emph{point de vue recommandé}, mais elle a l'inconvéniant d'être ambigüe à
cause de la perspective (dans cette image, il peut être difficile de savoir si
le point de vue et vers le modèle ou vers nous).


\subsection{Les flèches}
\subsubsection{Principe}
Les flèches sont supposées être plus intuitives pour un utilisateur qui n'a pas
l'habitude des \emph{viewports} précédemment utilisés. Plutôt que de suggérer
un point de vue, elles suggèrent le mouvemement qui va mener à ce point de vue.
\begin{figure}[H]
    \centering
    \includegraphics[scale=0.275]{img/new/02.png}
    \caption{Des recommandations flèches}
\end{figure}

\subsubsection{Courbure de la flèche}
Pour le dessin des flèches, plusieurs choses sont à prendre en compte :
\begin{itemize}
    \item il faut éviter que la flèche soit trop \emph{présente} à l'écran et
        qu'elle obstrue trop le reste de la scène
    \item il faut que la flèche soit dans un plan qui ne soit pas orthogonal au
        plan image de la caméra. En effet, si la flèche est dans un plan
        orthogonal au plan image de la caméra, elle se projettera comme un
        segment et on ne pourra pas voir la courbure de la flèche.
\end{itemize}

\paragraph{}
Pour trouver la courbure de la flèche, nous posons $C$ le centre de la caméra,
$R$ le centre de la recommandation, et $R'$ le vecteur qui donne la direction
de la recommandation. Nous cherchons ensuite un polynôme $f$ tel que :
$$\left\{\begin{array}{lcl}
    f(0) & = & C \\
    f(1) & = & R \\
    f'(1) & = & \lambda R' \text{ avec } \lambda \in \mathbb{R}^{+}
\end{array}\right.$$

\paragraph{}
Le problème de ce polynôme est qu'il ne vérifie aucune des contraintes énoncées
précédemment : puisque $f(0) = C$, le bout de la flèche est dans la caméra, et
va donc masquer toute la scène, et la courbe va en plus se projeter sur une
ligne sur l'écran.

\paragraph{}
Pour solutionner le premier problème, nous nous contenterons d'afficher
seulement la flèche pour des instants $t \in [0.5, 1]$.

\paragraph{}
Pour solutionner le deuxième problème, nous allons translater le centre de la
caméra vers le bas et le côté de la direction de la recommandation, pour
accentuer la courbure de la flèche, et nous résolvons plutôt le système suivant
:
$$\left\{\begin{array}{lcl}
    f(0) & = & C - e_z + \lambda R' \\
    f(1) & = & R \\
    f'(1) & = & \lambda R' \text{ avec } \lambda \in \mathbb{R}^{+}
\end{array}\right.$$

\subsection{Les interactions}
\subsubsection{Au survol}
\indent Cette fonctionnalité est inspirée des récents lecteurs video sur le
web.  Lorsque l'on regarde une video, on a la barre de \emph{seeking} en bas et
passer le curseur sur cette barre affiche l'image de la vidéo à l'instant visé.
Nous avons simplement adapté cette techniques à nos recommandations : lorsque
le curseur survole une recommandation, une prévisualisation est affichée dans
une petite boite au voisinage du curseur.

\begin{figure}[H]
    \centering
    \includegraphics[scale=0.275]{img/new/03.png}
    \caption{Une prévisualisation}
\end{figure}

\subsubsection{Au clic}
\indent Lors d'un clic sur une recommandation, la caméra suit un mouvement
fluide jusqu'au point de vue recommandé. La trajectoire est définié par un
polynôme interpolant tel que :
\begin{itemize}
    \item la position initiale est la position de la caméra
    \item la position finale est la position de la recommandation
    \item la dérivée de la trajectoire à l'instant final est la direction de la
        recommandation
\end{itemize}

\paragraph{}
Ce mouvement fluide est là pour ne pas perturber l'utilisateur qui pourrait
\emph{se perde} si jamais il était téléporté

\paragraph{}
De plus, les recommandations se comportent comme des liens hypertextes : elles
sont bleues si elles n'ont jamais été clicées, et deviennent violettes si
l'utilisateur les a déjà consommées. Ceci est fait pour qu'un utilisateur
puisse savoir par où il est passé, et ce qui lui reste encore à visiter.


\section{Autres éléments de navigation}
\paragraph{}
Pour faciliter la navigation, quelques autres éléments de navigation sont
présents.

\begin{figure}[H]
    \centering
    \begin{tikzpicture}[]
        \node (myfirstpic) at (0,0) {\includegraphics[scale=0.35]{img/new/buttons.png}};
        \tikzvline{-7}{1}
        \tikzvline{-5.8}{2}
        \tikzvline{-5.2}{3}
        \tikzvline{-4}{4}
        \tikzvline{-1.5}{5}

        \draw (8,5) -- (7,5);
        \draw (8,5) node[right]{6};

        \draw (-8,5) -- (-7,5);
        \draw (-8,5) node[left]{7};
    \end{tikzpicture}
    \caption{Les différents éléments de l'interface}
\end{figure}


\paragraph{}
\begin{enumerate}

    \item \emph{Reset camera} : pour chaque scène, une position initiale est
        définie. Cliquer sur ce bouton ramène la caméra à sa position initiale.

    \item \emph{Previous} : à chaque clic sur une recommandation, les positions
        intiales et finales sont sauvegardées. Cliquer sur ce bouton ramène à
        la position précédente.

    \item \emph{Next} : cliquer sur ce bouton ramène à la position suivante.

    \item \emph{Pointer lock} : permet de passer du mode \emph{pointer-lock} au
        mode \emph{drag-n-drop} et vice-versa.

    \item \emph{Music} : un lecteur qui contrôle une petite musique qui permet
        de se mettre dans l'ambiance de la scène.

    \item \emph{Coin gauge} : une jauge qui représente l'avancement de la
        récupération des pièces.

    \item \emph{FPS counter} : indique la période de rafraîchissement du rendu.

\end{enumerate}



