2015-08-26 09:11:58 +02:00
|
|
|
% 16:9 version
|
|
|
|
% \documentclass[aspectratio=169]{beamer}
|
2015-09-23 08:57:30 +02:00
|
|
|
\newcommand{\bigscale}{0.16}
|
|
|
|
\newcommand{\smallscale}{0.16}
|
2015-08-26 09:11:58 +02:00
|
|
|
|
|
|
|
% 4:3 version
|
|
|
|
\documentclass{beamer}
|
2015-09-23 08:57:30 +02:00
|
|
|
% \newcommand{\bigscale}{0.175}
|
|
|
|
% \newcommand{\smallscale}{0.125}
|
|
|
|
|
|
|
|
\RequirePackage{ifthen}
|
2015-08-26 09:11:58 +02:00
|
|
|
|
|
|
|
\usepackage[utf8]{inputenc}
|
2015-09-18 16:33:58 +02:00
|
|
|
\usepackage[frenchb]{babel}
|
2015-08-26 09:11:58 +02:00
|
|
|
\usepackage{hyperref}
|
|
|
|
\usepackage[T1]{fontenc}
|
|
|
|
\usepackage{multicol}
|
|
|
|
\usepackage{lmodern}
|
|
|
|
\usepackage{vwcol}
|
|
|
|
\usepackage{pgfpages}
|
2015-09-21 09:44:35 +02:00
|
|
|
\usepackage{hyperref}
|
2015-09-18 16:33:58 +02:00
|
|
|
\usepackage{tikz}
|
2015-09-23 08:57:30 +02:00
|
|
|
\usepackage{appendixnumberbeamer}
|
|
|
|
|
|
|
|
\newboolean{sectiontoc}
|
|
|
|
\setboolean{sectiontoc}{true}
|
2015-09-18 16:33:58 +02:00
|
|
|
|
|
|
|
\setbeameroption{show notes}
|
|
|
|
\setbeameroption{show notes on second screen=right}
|
2015-08-26 09:11:58 +02:00
|
|
|
|
2015-09-21 09:44:35 +02:00
|
|
|
\usetheme{JuanLesPins} % or try Darmstadt, Madrid, Warsaw, ...
|
2015-08-26 09:11:58 +02:00
|
|
|
\setbeamertemplate{navigation symbols}{}
|
|
|
|
|
2015-09-18 16:33:58 +02:00
|
|
|
\newcommand{\tikzvline}[2]{
|
|
|
|
\draw (#1,-6) -- (#1,-5.5);
|
|
|
|
\draw (#1,-6) node[below]{#2};
|
|
|
|
}
|
|
|
|
|
|
|
|
\graphicspath{{../img/}}
|
|
|
|
|
2015-09-23 08:57:30 +02:00
|
|
|
\title[Navigation 3D et recommandations]{Systèmes de navigation 3D et mécanismes de recommandation}
|
2015-08-26 09:11:58 +02:00
|
|
|
\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}%
|
2015-09-23 08:57:30 +02:00
|
|
|
\usebeamerfont{title in head/foot}IRIT --- VORTEX\hfill\insertframenumber\,/\,\inserttotalframenumber%
|
2015-08-26 09:11:58 +02:00
|
|
|
\end{beamercolorbox}}%
|
|
|
|
\vskip0pt%
|
|
|
|
}
|
|
|
|
|
|
|
|
\usepackage{nameref}
|
|
|
|
\makeatletter
|
|
|
|
\newcommand*{\currentname}{\@currentlabelname}
|
|
|
|
\makeatother
|
|
|
|
|
|
|
|
\AtBeginSection[] % Do nothing for \section*
|
|
|
|
{
|
2015-09-23 08:57:30 +02:00
|
|
|
\ifthenelse{\boolean{sectiontoc}}{
|
|
|
|
\begin{frame}<beamer>
|
|
|
|
\tableofcontents[currentsection]
|
|
|
|
\end{frame}
|
|
|
|
}
|
2015-08-26 09:11:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
\begin{document}
|
|
|
|
\begin{frame}
|
|
|
|
\titlepage
|
|
|
|
\end{frame}
|
|
|
|
|
2015-09-23 08:57:30 +02:00
|
|
|
\begin{frame}
|
|
|
|
\centering
|
|
|
|
\includegraphics[scale=0.2]{icons/IRIT.jpg}\\[0.5cm]
|
|
|
|
\includegraphics[scale=0.2]{icons/vortex.png}\\[0.5cm]
|
|
|
|
\includegraphics[scale=0.3]{icons/nus.jpg}
|
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
\begin{figure}
|
|
|
|
\includegraphics[scale=0.2]{new/bureau.jpg}
|
|
|
|
\caption{Le bureau}
|
|
|
|
\end{figure}
|
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
|
|
|
|
\begin{frame}<beamer>
|
|
|
|
\tableofcontents
|
|
|
|
\end{frame}
|
|
|
|
|
2015-09-18 16:33:58 +02:00
|
|
|
\section{Introduction}
|
2015-09-23 08:57:30 +02:00
|
|
|
\subsection{Contexte}
|
|
|
|
\begin{frame}
|
|
|
|
\begin{figure}
|
|
|
|
\includegraphics[scale=0.25]{new/youtube.png}
|
|
|
|
\caption{Une vidéo sur Youtube}
|
|
|
|
\end{figure}
|
|
|
|
\end{frame}
|
|
|
|
|
2015-08-26 09:11:58 +02:00
|
|
|
\begin{frame}
|
|
|
|
\begin{figure}
|
2015-09-18 16:33:58 +02:00
|
|
|
\includegraphics[scale=0.5]{new/interface2.png}
|
2015-09-23 08:57:30 +02:00
|
|
|
\caption{Un lecteur vidéo avec recommandations}
|
2015-08-26 09:11:58 +02:00
|
|
|
\end{figure}
|
2015-09-18 16:33:58 +02:00
|
|
|
\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}
|
2015-09-23 08:57:30 +02:00
|
|
|
\note[item]{Mettre la première video navigation}
|
2015-08-26 09:11:58 +02:00
|
|
|
\end{frame}
|
|
|
|
|
2015-09-18 16:33:58 +02:00
|
|
|
\section{Technologies utilisées}
|
2015-08-26 09:11:58 +02:00
|
|
|
\begin{frame}
|
2015-09-23 08:57:30 +02:00
|
|
|
\begin{figure}
|
|
|
|
\includegraphics[scale=0.1]{icons/html5.png}~
|
|
|
|
\includegraphics[scale=0.125]{icons/css3.png}~~~
|
|
|
|
\includegraphics[scale=0.05]{icons/javascript.png}~
|
|
|
|
\includegraphics[scale=0.25]{icons/bootstrap.png}\\[0.7cm]
|
|
|
|
\includegraphics[scale=0.25]{icons/webgl.png}~
|
|
|
|
\includegraphics[scale=0.3]{icons/threejs.png}\\[0.5cm]
|
|
|
|
\includegraphics[scale=0.25]{icons/nodejs.png}\quad\quad\quad\quad\quad
|
|
|
|
\includegraphics[scale=0.25]{icons/socketio.png}~
|
|
|
|
\end{figure}
|
|
|
|
\note[item]{Contrainte web pour les tests}
|
2015-08-26 09:11:58 +02:00
|
|
|
\end{frame}
|
|
|
|
|
2015-09-18 16:33:58 +02:00
|
|
|
\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}
|
2015-09-23 08:57:30 +02:00
|
|
|
|
|
|
|
\note[item]{Faire une démo}
|
|
|
|
\note[item]{Beaucoup de degré de liberté}
|
|
|
|
\note[item]{Difficile}
|
2015-09-18 16:33:58 +02:00
|
|
|
\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}
|
2015-09-23 08:57:30 +02:00
|
|
|
% \animategraphics[autoplay,loop,scale=0.2, controls]{45}{../img/arrowclick/arrowclick}{1}{45}
|
2015-09-18 16:33:58 +02:00
|
|
|
\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}
|
|
|
|
~
|
2015-09-23 10:36:04 +02:00
|
|
|
\includegraphics[scale=0.15]{new/03.png}
|
2015-09-18 16:33:58 +02:00
|
|
|
\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}
|
|
|
|
|
2015-09-21 09:44:35 +02:00
|
|
|
\section{Test de l'interface}
|
|
|
|
|
|
|
|
\subsection{Principe du test}
|
|
|
|
\begin{frame}
|
|
|
|
Chercher des pièces dans une scène :\\[0.25cm]
|
|
|
|
\begin{enumerate}
|
2015-09-23 09:33:22 +02:00
|
|
|
\item Un formulaire (âge, habitude en terme de jeux vidéo)
|
2015-09-21 09:44:35 +02:00
|
|
|
\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}
|
2015-09-23 08:57:30 +02:00
|
|
|
|
|
|
|
\note[item]{Exp différentes : scènes différentes, et styles de reco différents}
|
2015-09-23 09:33:22 +02:00
|
|
|
\note[item]{Habitude en terme de jeux video $\Longrightarrow$ bonne capacité à naviguer}
|
2015-09-21 09:44:35 +02:00
|
|
|
\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}
|
2015-09-23 08:57:30 +02:00
|
|
|
\begin{columns}
|
|
|
|
\begin{column}{0.5\textwidth}
|
|
|
|
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{column}
|
|
|
|
\begin{column}{0.4\textwidth}
|
|
|
|
\begin{figure}
|
|
|
|
\includegraphics[scale=0.1]{new/allcoins.png}
|
|
|
|
\caption{Pièces possibles}
|
|
|
|
\end{figure}
|
|
|
|
\end{column}
|
|
|
|
\end{columns}
|
|
|
|
\note[item]{Etude utilisateur va bientot etre deployée sur micro workers}
|
2015-09-21 09:44:35 +02:00
|
|
|
\end{frame}
|
2015-09-18 16:33:58 +02:00
|
|
|
|
2015-09-23 08:57:30 +02:00
|
|
|
\setboolean{sectiontoc}{false}
|
2015-09-18 16:33:58 +02:00
|
|
|
\section{Streaming}
|
2015-09-21 09:44:35 +02:00
|
|
|
\subsection{Protocole}
|
2015-09-23 08:57:30 +02:00
|
|
|
\setboolean{sectiontoc}{true}
|
|
|
|
|
|
|
|
\begin{frame}
|
|
|
|
\tableofcontents[currentsection]
|
|
|
|
\note[item]{Montrer la démo sans bouger la caméra}
|
|
|
|
\end{frame}
|
2015-09-18 16:33:58 +02:00
|
|
|
|
2015-09-21 09:44:35 +02:00
|
|
|
\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
|
2015-09-23 08:57:30 +02:00
|
|
|
\draw[dashed, ->] (-0.1,-3) -- (-0.1,-4);
|
2015-09-21 09:44:35 +02:00
|
|
|
|
|
|
|
\pause
|
2015-09-23 08:57:30 +02:00
|
|
|
\draw (2.5,-3.3) node[rotate=-12] {Caméra / \emph{frustum}};
|
|
|
|
\draw[->] (0,-3) -- (5, -4);
|
2015-09-21 09:44:35 +02:00
|
|
|
|
|
|
|
\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}
|
2015-09-23 08:57:30 +02:00
|
|
|
\note[item]{Faire la démo en stream progressif (bouge la cam)}
|
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
\setboolean{sectiontoc}{false}
|
|
|
|
\section*{Conclusion}
|
|
|
|
\begin{frame}
|
|
|
|
\end{frame}
|
|
|
|
|
|
|
|
\appendix
|
|
|
|
\begin{frame}
|
|
|
|
\frametitle{Courbure des flèches}
|
|
|
|
\begin{block}{Equation des flèches}
|
|
|
|
$
|
|
|
|
\begin{array}{lcccl}
|
|
|
|
P & : & [0,1] & \rightarrow & \mathbb{R}^3 \\
|
|
|
|
&& t & \mapsto & (x,y,z)
|
|
|
|
\end{array}$ un polynôme de degré 3 tel que :
|
|
|
|
$$
|
|
|
|
\left\{\begin{array}{lcl}
|
|
|
|
P(0) & = & C -e_z + \lambda R'\\
|
|
|
|
P(1) & = & R \\
|
|
|
|
P'(1) & = & \lambda R'
|
|
|
|
\end{array}\right.\text{ avec } \lambda \in \mathbb{R}^{+}$$
|
|
|
|
\end{block}
|
|
|
|
|
|
|
|
\begin{itemize}
|
|
|
|
\item $C$ : centre de la caméra
|
|
|
|
\item $R$ : centre de la recommandation
|
|
|
|
\item $R'$ : direction de la recommandation
|
|
|
|
\end{itemize}
|
2015-09-21 09:44:35 +02:00
|
|
|
\end{frame}
|
2015-09-23 08:57:30 +02:00
|
|
|
|
|
|
|
|
2015-08-26 09:11:58 +02:00
|
|
|
\end{document}
|