This commit is contained in:
Thomas FORGIONE 2015-09-05 23:43:05 +02:00
parent a9b572e8a3
commit 50b2c6af07
1 changed files with 116 additions and 24 deletions

View File

@ -45,6 +45,13 @@
\newcommand{\hsc}[1]{{\Large\MakeUppercase{#1}}} \newcommand{\hsc}[1]{{\Large\MakeUppercase{#1}}}
\newcommand{\hscs}[1]{{\footnotesize\MakeUppercase{#1}}} \newcommand{\hscs}[1]{{\footnotesize\MakeUppercase{#1}}}
\newcommand{\namedparagraph}[1]{\paragraph{#1}\mbox{}\\}
\newcommand{\tikzvline}[2]{
\draw (#1,-6) -- (#1,-5.5);
\draw (#1,-6) node[below]{#2};
}
\begin{document} \begin{document}
\begin{titlepage} \begin{titlepage}
@ -87,6 +94,7 @@
\end{titlepage} \end{titlepage}
\normalsize \normalsize
\newpage
\tableofcontents \tableofcontents
\newpage \newpage
@ -147,8 +155,45 @@ est libre et qui a largement fait ses preuves). OpenShift propose d'héberger
lui-même la base de données, mais la version gratuite ne proposant qu'1 Go lui-même la base de données, mais la version gratuite ne proposant qu'1 Go
d'espace de stockage, nous avons préféré l'héberger nous-même. d'espace de stockage, nous avons préféré l'héberger nous-même.
\newpage
\section{Une première interface} \subsection{Développement, debug et déploiement}
\paragraph{}
Pour éviter d'avoir des fichiers trop longs, nous avons choisi de séparer les
sources dans de nombreux fichiers de taille plus petite, et de les fusionner
automatiquement. Pour le développement, ils seront simplement concaténés grâce
à un script développé spécialement pour cela, qui mime les paramètres de
Closure Compiler qui sera utilisé pour la fusion au moment du le déploiement
(ce dernier permet non seulement la fusion des fichiers mais aussi la
minification\footnote{la minification sert notamment à réduire la taille du
script : n'oublions pas que nous parlons de serveur web, et il est donc
intéressant de réduire la taille des programmes de sorte à les charger plus
rapidement} (effacement des commentaires et des retours à la ligne,
simplifications des noms de variables et plus \footnote{en JavaScript, il est
plus rapide d'écrire \texttt{!0} pour \texttt{true} par exemple.}). Pour le
développement, on a utilisé \href{https://github.com/remy/nodemon}{nodemon} et
inotify, qui permettent de relancer le serveur local lorsqu'une modification
est détectée (la fusion des fichiers est donc réeffectuée).
\paragraph{}
En ce qui concerne le versionnage des fichiers, nous avons utilisé Git avec
deux \emph{repositories} :
\begin{itemize}
\item le premier, hébergé sur
\href{https://github.com/tforgione/3dinterface}{Github}, sert au
développement, et contient les fichiers fractionnés ainsi que les
outils permettant la génération des fichiers fusionnés.
\item le deuxième, hebergé chez OpenShift, qui contient la version finale
du programme, permet de déployer le code du serveur quand les
\emph{commits} sont \emph{pushés}.
\end{itemize}
\paragraph{}
Pour nous aider au debug, nous avons utilisé \href{http://jshint.com/}{JSHint}
qui nous aide à détecter les erreurs potentielles liées aux subtilités du
langage.
\section{L'interface}
\subsection{Interactions élémentaires}
\paragraph{} \paragraph{}
La première interface a été pensée pour être la plus simple possible. 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. L'utilisateur contrôle une caméra qui se déplace librement dans un modèle 3D.
@ -169,14 +214,14 @@ On peut pivoter la caméra de plusieurs manières :
de tir de tir
\end{itemize} \end{itemize}
\newpage
\section{Les recommandations} \subsection{Les recommandations}
\paragraph{} \paragraph{}
Les recommandations sont là pour suggérer des points de vue à l'utilisateur. 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 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. d'objets 3D ajoutés à la scène. Deux affichages ont été testés.
\subsection{Les \emph{viewports}} \subsubsection{Les \emph{viewports}}
\paragraph{} \paragraph{}
Les \emph{viewports} sont les affichages les plus simples : ils représentent Les \emph{viewports} sont les affichages les plus simples : ils représentent
une caméra, avec son centre optique et son plan image. une caméra, avec son centre optique et son plan image.
@ -191,8 +236,8 @@ beaucoup masquer le reste des modèles et suggère assez bien l'idée d'un
cause de la perspective (dans cette image, il peut être difficile de savoir si 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). le point de vue et vers le modèle ou vers nous).
\newpage
\subsection{Les flèches} \subsubsection{Les flèches}
\paragraph{} \paragraph{}
Les flèches sont supposées être plus intuitives pour un utilisateur qui n'a pas 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 l'habitude des \emph{viewports} précédemment utilisés. Plutôt que de suggérer
@ -203,27 +248,24 @@ un point de vue, elles suggèrent le mouvemement qui va mener à ce point de vue
\caption{Des recommandations flèches} \caption{Des recommandations flèches}
\end{figure} \end{figure}
\paragraph{} \subsubsection{Les interactions}
\namedparagraph{Au survol}
\subsection{Les interactions} \indent Cette fonctionnalité est inspirée des récents lecteurs video sur le
\subsubsection{Au survol} web. Lorsque l'on regarde une video, on a la barre de \emph{seeking} en bas et
\paragraph{}
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é. 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 Nous avons simplement adapté cette techniques à nos recommandations : lorsque
le curseur survole une recommandation, une prévisualisation est affichée dans le curseur survole une recommandation, une prévisualisation est affichée dans
une petite boite au voisinage du curseur. une petite boite au voisinage du curseur.
\begin{figure}[H]
\centering \begin{figure}[H] \centering
\includegraphics[scale=0.275]{img/new/03.png} \includegraphics[scale=0.275]{img/new/03.png}
\caption{Une prévisualisation} \caption{Une prévisualisation}
\end{figure} \end{figure}
\subsubsection{Au click} \namedparagraph{Au clic}
Lors d'un click sur une recommandation, la caméra suit un mouvement fluide \indent Lors d'un clic sur une recommandation, la caméra suit un mouvement
jusqu'au point de vue recommandé. La trajectoire est définié par un polynôme fluide jusqu'au point de vue recommandé. La trajectoire est définié par un
interpolant tel que : polynôme interpolant tel que :
\begin{itemize} \begin{itemize}
\item la position initiale est la position de la caméra \item la position initiale est la position de la caméra
\item la position finale est la position de la recommandation \item la position finale est la position de la recommandation
@ -237,11 +279,61 @@ Ce mouvement fluide est là pour ne pas perturber l'utilisateur qui pourrait
\paragraph{} \paragraph{}
De plus, les recommandations se comportent comme des liens hypertextes : elles De plus, les recommandations se comportent comme des liens hypertextes : elles
sont bleues si elles n'ont jamais été clickées, et deviennent violettes si 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 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. puisse savoir par où il est passé, et ce qui lui reste encore à visiter.
\newpage \subsection{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}
\section{L'étude utilisateur} \section{L'étude utilisateur}
\paragraph{} \paragraph{}
Pour tester le comportement des utilisateurs face aux recommandations, nous Pour tester le comportement des utilisateurs face aux recommandations, nous
@ -261,10 +353,10 @@ pièces rouges a été fait.
\paragraph{} \paragraph{}
\newpage
\section{Streaming de modèle 3D} \section{Streaming de modèle 3D}
\newpage
\section*{Conclusion} \section*{Conclusion}
\label{end}\end{document} \label{end}\end{document}