% 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}<beamer>
        \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}
