% 16:9 version % \documentclass[aspectratio=169]{beamer} % \newcommand{\bigscale}{0.16} % \newcommand{\smallscale}{0.16} % 4:3 version \documentclass{beamer} \newcommand{\bigscale}{0.175} \newcommand{\smallscale}{0.125} \usepackage[utf8]{inputenc} \usepackage[frenchb]{babel} \usepackage{hyperref} \usepackage[T1]{fontenc} \usepackage{multicol} \usepackage{lmodern} \usepackage{vwcol} \usepackage{pgfpages} \usepackage{hyperref} % \usepackage{animate} \usepackage{tikz} \setbeameroption{show notes} \setbeameroption{show notes on second screen=right} %\setbeameroption{show notes on second screen=right} \usetheme{JuanLesPins} % or try Darmstadt, Madrid, Warsaw, ... \setbeamertemplate{navigation symbols}{} \newcommand{\tikzvline}[2]{ \draw (#1,-6) -- (#1,-5.5); \draw (#1,-6) node[below]{#2}; } \graphicspath{{../img/}} %\setbeamertemplate{headline}{} \title{Interface en 3D et mécanisme de recommandation} \author{Thomas Forgione} \date{\today} \defbeamertemplate*{footline}{shadow theme} {% \leavevmode% \hbox{\begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm plus1fil,rightskip=.3cm]{author in head/foot}% \usebeamerfont{author in head/foot}\hfill\insertshortauthor \ \end{beamercolorbox}% \begin{beamercolorbox}[wd=.5\paperwidth,ht=2.5ex,dp=1.125ex,leftskip=.3cm,rightskip=.3cm plus1fil]{title in head/foot}% \usebeamerfont{title in head/foot}\insertshorttitle\hfill\insertframenumber\,/\,\inserttotalframenumber% \end{beamercolorbox}}% \vskip0pt% } \usepackage{nameref} \makeatletter \newcommand*{\currentname}{\@currentlabelname} \makeatother \AtBeginSection[] % Do nothing for \section* { \begin{frame} \tableofcontents[currentsection] \end{frame} } \begin{document} \begin{frame} \titlepage \end{frame} \section{Introduction} \begin{frame} \frametitle{Contexte} \begin{figure} \includegraphics[scale=0.5]{new/interface2.png} \caption{Une interface avec recommandations} \end{figure} \note{Travaux de Vincent \textsc{Charvillat} et Axel \textsc{Carlier}} \note[item]{Interface avec recommandations} \note[item]{Biaiser l'interaction de l'utilisateur pour le rendre prévisible} \note[item]{Préchargement} \end{frame} \section{Technologies utilisées} \subsection{Côté serveur} \begin{frame} NodeJs et certains \emph{packages} \begin{itemize} \item \texttt{express} \item \texttt{jade} \item \texttt{pg} \item \texttt{body-parser} \item \texttt{cookie-parser} et \texttt{cookie-session} \item \texttt{socket.io} \end{itemize} \note[item]{express : framework web pour avoir un MVC} \note[item]{jade : moteur de template pour gérer les vues de manière sympathiques} \note[item]{pg : connection à la base de données} \note[item]{body-parser : gérer les paramètres envoyés dans les requêtes} \note[item]{cookie-parser et cookie-session : pour avoir une session gérée avec des cookies} \note[item]{socket.io : gérer les sockets (et WebSockets facilement)} \end{frame} \subsection{Côté client} \begin{frame} \begin{itemize} \item HTML5 \item CSS3 \item JavaScript \item Boostrap \item WebGL \item Three.js \end{itemize} \end{frame} \section{L'interface} \subsection{Interface de base} \begin{frame} \begin{itemize} \item Interaction de type jeux vidéo \newline \begin{figure} \centering \includegraphics[scale=0.25]{wiki/spheric.png} \caption{Paramètres du contrôleur} \end{figure} \item Clavier pour la translation \item \emph{drag-n-drop} ou \emph{pointer-lock} pour la rotation \end{itemize} \end{frame} \subsection{Recommandations} \begin{frame} \frametitle{\emph{Viewport}} \begin{figure} \includegraphics[scale=0.2]{new/01.png} \caption{Une recommandation \emph{viewport}} \end{figure} \end{frame} \begin{frame} \frametitle{\emph{Arrow}} \begin{figure} \includegraphics[scale=0.2]{new/02.png} \caption{Une recommandation \emph{arrow}} \end{figure} \end{frame} \subsection{Prévisualisation} \begin{frame} \begin{figure}[H] \centering \includegraphics[scale=0.3]{new/interface2.png} ~ \includegraphics[scale=0.13]{new/03.png} \caption{Des prévisualisations sur différentes interfaces} \end{figure} \end{frame} \subsection{Interface complète} \begin{frame} \begin{figure}[H] \scalebox{.5}{\parbox{2\linewidth}{% \centering \begin{tikzpicture}[] \node (myfirstpic) at (0,0) {\includegraphics[scale=0.35]{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} \note[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.} \note[item]{ \emph{Previous} : à chaque clic sur une recommandation, les positions intiale et finale sont sauvegardées. Cliquer sur ce bouton ramène à la position précédente.} \note[item]{ \emph{Next} : cliquer sur ce bouton ramène à la position suivante.} \note[item]{ \emph{Pointer lock} : permet de passer du mode \emph{pointer-lock} au mode \emph{drag-n-drop} et vice-versa.} \note[item]{ \emph{Music} : un lecteur qui contrôle une petite musique qui permet de se mettre dans l'ambiance de la scène.} \note[item]{ \emph{Coin gauge} : une jauge qui représente l'avancement de la récupération des pièces.} \note[item]{ \emph{FPS counter} : indique la période de rafraîchissement du rendu.} \end{frame} \section{Test de l'interface} \subsection{Principe du test} \begin{frame} Chercher des pièces dans une scène :\\[0.25cm] \begin{enumerate} \item Un formulaire (age, habitude en terme de jeux vidéo) \item Un didacticiel \item Trois expériences différentes \item Un formulaire final (intérêt des recommandations, préférences) \end{enumerate} ~\\[0.25cm] Sauvegarde complète des interactions de l'utilisateur :\\[0.25cm] \begin{itemize} \item Mouvement clavier / souris \item Recommandations (clic ou survol) \item Pièces récupérées \item Boutons de l'interface (précédente, suivante, reset...) \end{itemize} \end{frame} \subsection{Tirage des expériences} \begin{frame} \begin{block}{Objectifs} \begin{itemize} \item Tirer des expériences aléatoires \item Eliminer la dépendance entre les pièces et le recommandations \item Minimiser les paramètres variables pour faire des comparaisons \end{itemize} \end{block} ~\\[0.5cm] Parmi les paramètres, on a : \begin{itemize} \item Niveau de l'utilisateur \item Scène et combinaison de pièces \item Type de recommandations \end{itemize} \end{frame} \section{Streaming} \subsection{Protocole} \begin{frame} \begin{itemize} \item Communication client-serveur via \texttt{socket.io} (et \texttt{Websocket}) \item Modèles sous forme \texttt{.obj} et \texttt{.mtl} \item Streaming orienté faces \item Ajout dynamique des éléments reçus \item Envoi des matériaux au début \end{itemize} \end{frame} \begin{frame} \begin{figure} \centering \begin{tikzpicture}[scale=0.6,every node/.style={scale=0.6}] \draw (0,0) node[above]{Client}; \draw (0,0) -- (0,-8); \draw (5,0) node[above]{Serveur}; \draw (5,0) -- (5,-8); \pause \draw (2.5,-1.3) node[rotate=-12] {Path jusqu'au modèle}; \draw[->] (0,-1) -- (5, -2); \pause \draw (2.5,-2.3) node[rotate=12] {Liste des matériaux}; \draw[<-] (0,-3) -- (5, -2); \pause \draw (2.5,-3.3) node[rotate=-12] {Caméra / \emph{frustum}}; \draw[->] (0,-3) -- (5, -4); \pause \draw[dashed, ->] (-0.1,-3) -- (-0.1,-4); \pause \draw (2.5,-4.3) node[rotate=12] {Des éléments}; \draw[<-] (0,-5) -- (5, -4); \pause \draw (2.5,-5.3) node[rotate=-12] {Caméra / \emph{frustum}}; \draw[->] (0,-5) -- (5, -6); \pause \draw (2.5,-6.3) node[rotate=12] {D'autres éléments}; \draw[<-] (0,-7) -- (5, -6); \draw (2.5,-8) node{$\vdots$}; \onslide<1-> \end{tikzpicture} \caption{Communication client / serveur pour streaming de modèle 3D} \end{figure} \end{frame} \subsection{Frustum} \begin{frame} \begin{figure} \scalebox{.8}{\parbox{1.25\linewidth}{\centering\input{../common/build/frustum}}} \caption{Le frustum de la camera et différents objets\label{frustum-draw}} \end{figure} \end{frame} \end{document}