commit 451ec6af5b0e0a1c16c636aa3257539e9791b591
parent 0970717052e69eb9ed7fea8a142cd6908017d543
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Sun, 13 Nov 2011 04:08:30 +0100
Toutes les figures pour la première diapo.
Diffstat:
2 files changed, 336 insertions(+), 220 deletions(-)
diff --git a/pgfbaseimage.sty b/pgfbaseimage.sty
@@ -0,0 +1,2 @@
+% http://texblog.net/latex-archive/presentations/beamer-warnings/
+\RequirePackage{pgfcore}
+\ No newline at end of file
diff --git a/présentation.tex b/présentation.tex
@@ -1,5 +1,10 @@
-\documentclass{beamer}
+\documentclass[hyperref={pdfpagelabels=false}]{beamer}
+% hyperref and lmodern : http://texblog.net/latex-archive/presentations/beamer-warnings/
+\usepackage{lmodern}
\usepackage[utf8]{inputenc}
+\DeclareUnicodeCharacter{B0}{\textdegree}% °
+\DeclareUnicodeCharacter{2264}{\leq}% ≤
+\DeclareUnicodeCharacter{2265}{\geq}% ≥
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\usepackage{hyperref}
@@ -7,8 +12,7 @@
% https://launchpad.net/ubuntu/precise/i386/pgf/2.10-1
% http://launchpadlibrarian.net/70800349/pgf_2.10-1_all.deb
\usepackage{tikz}
-\usepackage{pgfplots}
-\usetikzlibrary{shapes,positioning,snakes,calc,chains}
+\usetikzlibrary{positioning,calc,chains}
\usetheme{Frankfurt}
\usepackage{graphicx}
@@ -29,20 +33,20 @@
\vskip0pt%
}
-% \AtBeginSection[] {
-% \begin{frame}
-% \frametitle{Plan}
-% \tableofcontents[currentsection]
-% \end{frame}
-% \addtocounter{framenumber}{-1}
-% }
+\AtBeginSection[] {
+ \begin{frame}
+ \frametitle{Plan}
+ \tableofcontents[currentsection]
+ \end{frame}
+ \addtocounter{framenumber}{-1}
+}
\begin{document}
\makeatletter\renewcommand*{\figurename}{\@gobble}\makeatother
-% \begin{frame}
-% \titlepage
-% \end{frame}
+\begin{frame}
+ \titlepage
+\end{frame}
% \section{Introduction}
@@ -51,256 +55,365 @@
\pgfmathrnd
\xdef\noiseseed{\pgfmathresult}
+\makeatletter
+\pgfmathdeclarefunction{lazyifthenelse}{3}{%
+ \ifx 1#1%
+ \pgfmathparse{#2}%
+ \else%
+ \pgfmathparse{#3}%
+ \fi%
+}
+\makeatother
+
\shorthandoff{;?:}
\tikzset{
declare function={
hash_3(\a,\b)=Mod(\a*\a+\b,1);
hash_2(\a,\b)=hash_3(mod(\a*\b,1.783)+77.123,mod(\a+\b,1.843)*-0.179);
hash(\a,\b)=hash_2(mod(\a+\b,1.783)*0.417,mod(\a*\b,1.843)+42.56);
- noise1D(\x)=hash(\x,\noiseseed);
- sampleLeft(\x,\periode)=floor(\x/\periode);
- sampleRight(\x,\periode)=floor(\x/\periode)+1;
+ noise1D(\x,\octave)=hash(\x,hash(\octave,\noiseseed));
+ sampleLeft(\x,\periode,\octave)=noise1D(floor(\x/\periode), \octave);
+ sampleLeftLeft(\x,\periode,\octave)=noise1D(floor(\x/\periode)-1, \octave);
+ sampleRight(\x,\periode,\octave)=noise1D(floor(\x/\periode)+1, \octave);
+ sampleRightRight(\x,\periode,\octave)=noise1D(floor(\x/\periode)+2, \octave);
sampleDelta(\x,\periode)=frac(\x/\periode);
linearInterpolation(\x,\a,\b)=\x*(\b-\a) + \a;
cosineInterpolation(\x,\a,\b)=(1-cos(\x*180))*0.5*(\b-\a) + \a;
- octave1DLinear(\x,\periode,\amplitude)=\amplitude*linearInterpolation(sampleDelta(\x,\periode), noise1D(sampleLeft(\x,\periode)), noise1D(sampleRight(\x,\periode)));
- octave1DCosine(\x,\periode,\amplitude)=\amplitude*cosineInterpolation(sampleDelta(\x,\periode), noise1D(sampleLeft(\x,\periode)), noise1D(sampleRight(\x,\periode)));
- % perlin1DCosine(\x,\periode,\octaves,\persistance,\amplitude)=\lazyifthenelse{\octaves == 0}{0}{\x + perlin1DCosine(\x,\periode*0.5,\octaves-1,\persistance,\amplitude*\persistance)};
- % recursive(\x)=\lazyifthenelse{\x == 0}{0}{\x+recursive(\x-1)}
+ cubicInterpolation_(\x,\p,\q,\r,\s)=((\p*\x + \q)*\x + \r)*\x + \s;
+ cubicInterpolation(\x,\a,\b,\c,\d)=cubicInterpolation_(\x, (\d-\c)-(\a-\b), ((\a-\b)*2)-(\d-\c), \c-\a, \b);
+ % Using linear interpolation
+ octave1DLinear(\x,\octave,\periode,\amplitude)=\amplitude*linearInterpolation(sampleDelta(\x,\periode), sampleLeft(\x,\periode,\octave), sampleRight(\x,\periode,\octave));
+ perlin1DLinear_(\x,\octave,\periode,\octaves,\persistance,\amplitude)=lazyifthenelse(\octave >= \octaves, 0, "octave1DLinear(\x,\octave,\periode,\amplitude) + perlin1DLinear_(\x,\octave+1,\periode*0.5,\octaves,\persistance,\amplitude*\persistance)");
+ perlin1DLinear(\x,\periode,\octaves,\persistance,\amplitude)=perlin1DLinear_(\x,0,\periode,\octaves,\persistance,\amplitude);
+ % Using cosine interpolation
+ octave1DCosine(\x,\octave,\periode,\amplitude)=\amplitude*cosineInterpolation(sampleDelta(\x,\periode), sampleLeft(\x,\periode,\octave), sampleRight(\x,\periode,\octave));
+ perlin1DCosine_(\x,\octave,\periode,\octaves,\persistance,\amplitude)=lazyifthenelse(\octave >= \octaves, 0, "octave1DCosine(\x,\octave,\periode,\amplitude) + perlin1DCosine_(\x,\octave+1,\periode*0.5,\octaves,\persistance,\amplitude*\persistance)");
+ perlin1DCosine(\x,\periode,\octaves,\persistance,\amplitude)=perlin1DCosine_(\x,0,\periode,\octaves,\persistance,\amplitude);
+ % Using cubic interpolation
+ octave1DCubic(\x,\octave,\periode,\amplitude)=\amplitude*cubicInterpolation(sampleDelta(\x,\periode), sampleLeftLeft(\x,\periode,\octave), sampleLeft(\x,\periode,\octave), sampleRight(\x,\periode,\octave), sampleRightRight(\x,\periode,\octave));
}
}
\shorthandon{;?:}
+\def\foo#1{#1}
+
\subsection{Perlin noise}
\begin{frame}
\frametitle{Perlin noise}
- \begin{itemize}
- \item Superposition d'octaves de bruit ($\text{seed} = \noiseseed$).
\begin{figure}[h]
\centering
- \begin{tikzpicture}[scale=0.1,mark size=10]
- \only<1->{ \path[samples at={0,16,...,64}, mark=ball] plot (\x,{octave1DLinear(\x,16,20)}); }
- \only<2>{ \draw[samples at={0,16,...,64}] plot (\x,{octave1DLinear(\x,16,20)}); }
- \only<3->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{octave1DCosine(\x,16,20)}); }
- \only<4->{ \path[samples at={0,8,...,64}, mark=ball] plot (\x,{20+octave1DLinear(\x,8,10)}); }
- \only<4->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{20+octave1DCosine(\x,8,10)}); }
- \only<5->{ \path[samples at={0,4,...,64}, mark=ball] plot (\x,{30+octave1DLinear(\x,4,5)}); }
- \only<5->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{30+octave1DCosine(\x,4,5)}); }
- % \only<1->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{perlin1DCosine(\x,16,2,0.5,20)}); }
- % \only<1->{ \draw[samples at={0,1,...,64}, smooth] plot (\x,{recursive(\x)}); }
+ \begin{tikzpicture}[
+ scale=0.09,
+ pcurve/.style={samples at={0,1,...,64}, smooth},
+ mcurve/.style={pcurve, mark=ball, mark size=18},
+ mgray/.style={mcurve,gray!50!white}]
+ % Prendre de la place lorsqu'on n'affiche pas les courbes supérieures.
+ \path (0,-5) -- (0,40);
+ \only<1-14>{
+ \path (-5,0) -- (70,0);
+ \node[anchor=east] at (-2,0) {\hphantom{\small $1+2+3$}};
+ \node[anchor=west] at (64+2,0) {\hphantom{\small $1+2+3$}};
+ }
+
+ % Lignes horizontales
+ \only<1-14>{ \draw[->,gray] (0,0) -- (70,0); }
+ \only<2-3,7-14>{ \draw[->,gray] (0,20) -- (70,20); }
+ \only<3-4,7-14>{ \draw[->,gray] (0,30) -- (70,30); }
+
+ % Amplitude
+ \only<11>{ \draw[<->, thick, red] (-2,1) -- (-2,19); }
+ % Octaves
+ \only<12>{ \node[anchor=east, text=red] at (-2,10) {1}; }
+ \only<12>{ \node[anchor=east, text=red] at (-2,25) {2}; }
+ \only<12>{ \node[anchor=east, text=red] at (-2,32.5) {3}; }
+ % Fréquence
+ \only<13>{ \draw[<->, thick, red] (0,-2) -- (16,-2); }
+ \only<13>{ \draw[dashed, red] (0,-2) -- (0,{octave1DCosine(0,0,16,20)}); }
+ \only<13>{ \draw[dashed, red] (16,-2) -- (16,{octave1DCosine(16,0,16,20)}); }
+ % Persistance
+ \only<14>{ \draw[<->, dashed, red] (-2,1) -- (-2,19); }
+ \only<14>{ \draw[<->, dashed, red] (-2,21) -- (-2,29); }
+ \only<14>{ \draw[thick, red] (-2,10) edge[->,bend left=70] node[left] {\small $\times 0.5$} (-2,25); }
+
+ % Étiquette à gauche
+ \only<4>{ \node[anchor=east] at (-2,{perlin1DCosine(0,16,2,0.5,20)}) {\small $1+2$}; }
+ \only<5>{ \node[anchor=east] at (-2,{perlin1DCosine(0,16,3,0.5,20)}) {\small $1+2+3$}; }
+
+ % Octave 0
+ \only<1-3>{ \draw[mcurve, mark repeat=16] plot (\x,{octave1DCosine(\x,0,16,20)}); }
+ \only<4>{ \draw[pcurve, gray] plot (\x,{octave1DCosine(\x,0,16,20)}); }
+ \only<5>{ \draw[pcurve, gray!50!white] plot (\x,{octave1DCosine(\x,0,16,20)}); }
+ \only<7>{ \draw[mgray, mark repeat=16] plot (\x,{octave1DLinear(\x,0,16,20)}); }
+ \only<8>{ \draw[mcurve, mark repeat=16] plot (\x,{octave1DLinear(\x,0,16,20)}); }
+ \only<9>{ \draw[mcurve, mark repeat=16] plot (\x,{octave1DCubic(\x,0,16,20)}); }
+ \only<10-14>{ \draw[mcurve, mark repeat=16] plot (\x,{octave1DCosine(\x,0,16,20)}); }
+
+ % Octave 1
+ \only<2-3>{ \draw[mcurve, mark repeat=8] plot (\x,{octave1DCosine(\x,1,8,10) + 20}); }
+ \only<7>{ \draw[mgray, mark repeat=8] plot (\x,{octave1DLinear(\x,1,8,10) + 20}); }
+ \only<8>{ \draw[mcurve, mark repeat=8] plot (\x,{octave1DLinear(\x,1,8,10) + 20}); }
+ \only<9>{ \draw[mcurve, mark repeat=8] plot (\x,{octave1DCubic(\x,1,8,10) + 20}); }
+ \only<10-14>{ \draw[mcurve, mark repeat=8] plot (\x,{octave1DCosine(\x,1,8,10) + 20}); }
+
+ % Octave 2
+ \only<3-4>{ \draw[mcurve, mark repeat=4] plot (\x,{octave1DCosine(\x,2,4,5) + 30}); }
+ \only<7>{ \draw[mgray, mark repeat=4] plot (\x,{octave1DLinear(\x,2,4,5) + 30}); }
+ \only<8>{ \draw[mcurve, mark repeat=4] plot (\x,{octave1DLinear(\x,2,4,5) + 30}); }
+ \only<9>{ \draw[mcurve, mark repeat=4] plot (\x,{octave1DCubic(\x,2,4,5) + 30}); }
+ \only<10-14>{\draw[mcurve, mark repeat=4] plot (\x,{octave1DCosine(\x,2,4,5) + 30}); }
+
+ % Octave 0+1
+ \only<4>{ \draw[mcurve, mark repeat=8] plot (\x,{perlin1DCosine(\x,16,2,0.5,20)}); }
+ \only<5>{ \draw[pcurve, gray] plot (\x,{perlin1DCosine(\x,16,2,0.5,20)}); }
+
+ % Octave 0+1+2
+ \only<5>{ \draw[mcurve, mark repeat=4] plot (\x,{perlin1DCosine(\x,16,3,0.5,20)}); }
+ \only<6>{ \draw[pcurve] plot (\x,{perlin1DCosine(\x,16,3,0.5,20)}); }
+ \end{tikzpicture}
+ % Hash de coordonnées
+ \begin{tikzpicture}[
+ node distance=0.5cm,
+ every node/.style={rectangle,minimum size=6mm,rounded corners=3mm,very thick,draw=black!50}
+ ]
+ \only<15>{
+ \path (0,-5*0.09) -- (0,40*0.09); % This and the 17.5*0.09 below are for vertical alignment with the other figure.
+ \node[draw] (hash1) at (0,17.5*0.09) {hash};
+ \node[draw,above left=of hash1, draw=blue!50] (x) {$x$};
+ \node[draw,below left=of hash1] (noctave) {n° octave};
+ \draw[->] (x) -- (hash1);
+ \draw[->] (noctave) -- (hash1);
+ \node[draw, right=of hash1] (hash2) {hash};
+ \node[draw,below left=of hash2] (seed) {graine};
+ \draw[->] (hash1) -- (hash2);
+ \draw[->] (seed) -- (hash2);
+ \node[right=of hash2, draw=green!50] (valeur) {$valeur$};
+ \draw[->] (hash2) -- (valeur);
+ }
\end{tikzpicture}
- \caption{Perlin noise}
+ % \caption{Perlin noise}
\end{figure}
- \item Interpolation linéaire, cubique ou cosinusoidale.
- \item Amplitude, octaves, fréquence, persistance.
- \item Hash de coordonnées% TODO
+ \begin{itemize}
+ \item<1-> Superposition d'octaves de bruit ($\text{seed} = \noiseseed$).% TODO : choisir une bonne seed et virer ça.
+ \item<7-> Interpolation\only<8->{ linéaire}\only<9->{, cubique}\only<10->{ ou cosinusoidale.}
+ \item<11-> Amplitude\only<12->{, octaves}\only<13->{, fréquence}\only<14->{, persistance.}
+ \item<15-> Hash de coordonnées
\end{itemize}
\end{frame}
-% \begin{frame}
-% \frametitle{Perlin noise (Variations)}
-% \begin{itemize}
-% \item Cevernes, nuages, textures, terrains : bruit $n$D et voxels.
-% \item Ridged Perlin Noise.
-% \item Midpoint displacement.
-% \item Simplex noise : généralisation des triangles équilatéraux à $n$ dimensions, interpolation par rapport aux coins. $d^2$ au lieu de $2^d$.
-% \item Bruit répétable 1D : points sur un cercle dans un espace 2D. Généralisation à $n$ dimensions : hypercercle $n$D dans un espace $2n$D.
-% %TODO : référence
-% \end{itemize}
-% \end{frame}
+\begin{frame}
+ \frametitle{Perlin noise (Variations)}
+ \begin{itemize}
+ \item Cevernes, nuages, textures, terrains : bruit $n$D et voxels.
+ \item Ridged Perlin Noise.
+ \item Midpoint displacement.
+ \item Simplex noise : généralisation des triangles équilatéraux à $n$ dimensions, interpolation par rapport aux coins. $d^2$ au lieu de $2^d$.
+ \item Bruit répétable 1D : points sur un cercle dans un espace 2D. Généralisation à $n$ dimensions : hypercercle $n$D dans un espace $2n$D.
+ {\tiny\url{http://www.gamedev.net/blog/33/entry-2138456-seamless-noise/}}
+ \end{itemize}
+\end{frame}
-% \subsection{Craters et Hills Algorithm}
-% \begin{frame}
-% \frametitle{Craters et Hills Algorithm}
-% \begin{itemize}
-% \item Craters
-% \begin{itemize}
-% \item Soustraire des cercles au terrain (z = z - f(distance au centre))
-% \item Sur un terrain nu
-% % TODO : image
-% \item Sur un terrain existant
-% % TODO : image
-% \end{itemize}
-% \item Hills Algorithm
-% \begin{itemize}
-% \item Inverse de craters : on ajoute plein de cercles
-% \end{itemize}
-% \item Stockage des cercles dans un arbre (BSP, Quadtree, arbre du LOD, \dots{}).
-% \end{itemize}
-% \end{frame}
+\subsection{Craters et Hills Algorithm}
+\begin{frame}
+ \frametitle{Craters et Hills Algorithm}
+ \begin{itemize}
+ \item Craters
+ \begin{itemize}
+ \item Soustraire des cercles au terrain (z = z - f(distance au centre))
+ \item Sur un terrain nu
+ % TODO : image
+ \item Sur un terrain existant
+ % TODO : image
+ \end{itemize}
+ \item Hills Algorithm
+ \begin{itemize}
+ \item Inverse de craters : on ajoute plein de cercles
+ \end{itemize}
+ \item Stockage des cercles dans un arbre (BSP, Quadtree, arbre du LOD, \dots{}).
+ \end{itemize}
+\end{frame}
-% \subsection{Érosion}
+\subsection{Érosion}
-% \begin{frame}
-% \frametitle{Érosion}
-% \begin{itemize}
-% \item Déplacement de sédiments.
-% \item Taux en fonction de la pente, dureté de la roche, végétation.
-% \item Carte de circulation des eaux.
-% \item Pas temps-réel.
-% \item Approximation : modification de la distribution des hauteurs. % TODO : schéma
-% \end{itemize}
-% \end{frame}
+\begin{frame}
+ \frametitle{Érosion}
+ \begin{itemize}
+ \item Déplacement de sédiments.
+ \item Taux en fonction de la pente, dureté de la roche, végétation.
+ \item Carte de circulation des eaux.
+ \item Pas temps-réel.
+ \item Approximation : modification de la distribution des hauteurs.
+ % TODO : schéma
+ \begin{figure}[h]
+ \centering
+ \begin{tikzpicture}
+ % Un dégradé vertical indiquant l'élévation de départ
+ % Fonction f(x) = x
+ % 2e dégradé indiquant le résultat.
+ % Même chose avec une autre fonction.
+ \end{tikzpicture}
+ \end{figure}
+ \end{itemize}
+\end{frame}
-% \subsection{Autres}
-% \begin{frame}
-% \frametitle{Autres méthodes}
-% \begin{itemize}
-% \item Chaînage d'algorithmes de bruit
-% \begin{itemize}
-% \item Ajout de couleurs, climats, végétation, relief\dots{}
-% \item Altération du comportement d'un algo.
-% \item {\tiny\url{http://www.gamedev.net/blog/33/entry-2249260-procedural-islands-redux/}}
-% \end{itemize}
-% \item Cartes polygonales. {\tiny\url{http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/}}
-% % TODO : voronoi etc.
-% \item Intégration de formes dans le terrain.
-% \end{itemize}
-% \end{frame}
+\subsection{Autres}
+\begin{frame}
+ \frametitle{Autres méthodes}
+ \begin{itemize}
+ \item Chaînage d'algorithmes de bruit
+ \begin{itemize}
+ \item Ajout de couleurs, climats, végétation, relief\dots{}
+ \item Altération du comportement d'un algo.
+ \item {\tiny\url{http://www.gamedev.net/blog/33/entry-2249260-procedural-islands-redux/}}
+ \end{itemize}
+ \item Cartes polygonales. {\tiny\url{http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/}}
+ % TODO : voronoi etc.
+ \item Intégration de formes dans le terrain.
+ \end{itemize}
+\end{frame}
-% \subsection{Rivières}
+\subsection{Rivières}
-% \begin{frame}
-% \frametitle{Rivières}
-% \begin{itemize}
-% \item Pathfinding {\tiny\url{http://www.umbrarumregnum.net/articles/creating-rivers}}
-% % Image
-% \item Affinage du tracé en fonction du LOD.
-% % Schéma sur un ou deux niveaux d'affinage.
-% \item Tracé arbitraire.
-% \item Intégration dans le terrain.
-% \end{itemize}
-% \end{frame}
-% % Si on utilise une méthode de coût qui favorise de passer par un petit
-% % bout de bruit plutôt que de le contourner, mais favorise le
-% % contournement pour une grosse accumulation de bruit, on pourra même
-% % simuler l'érosion qui efface les méandres trop petits.
+\begin{frame}
+ \frametitle{Rivières}
+ \begin{itemize}
+ \item Pathfinding {\tiny\url{http://www.umbrarumregnum.net/articles/creating-rivers}}
+ % Image
+ \item Affinage du tracé en fonction du LOD.
+ % Schéma sur un ou deux niveaux d'affinage.
+ \item Tracé arbitraire.
+ \item Intégration dans le terrain.
+ \end{itemize}
+\end{frame}
+% Si on utilise une méthode de coût qui favorise de passer par un petit
+% bout de bruit plutôt que de le contourner, mais favorise le
+% contournement pour une grosse accumulation de bruit, on pourra même
+% simuler l'érosion qui efface les méandres trop petits.
-% \subsection{Démonstration}
-% \begin{frame}
-% \frametitle{Démonstration}
-% \begin{center}
-% {\Huge World machine}
+\subsection{Démonstration}
+\begin{frame}
+ \frametitle{Démonstration}
+ \begin{center}
+ {\Huge World machine}
-% \vspace{1em}
-% \url{http://www.world-machine.com/}
-% \end{center}
-% \end{frame}
-
-% \section{Rendu}
+ \vspace{1em}
+ \url{http://www.world-machine.com/}
+ \end{center}
+\end{frame}
-% \subsection{Isosurfaces}
-% \begin{frame}
-% \frametitle{Isosurfaces}
-% \begin{itemize}
-% \item Metaballs % TODO : écran de veille / screenshot.
-% \item Surface 2D d'un bruit 3D.
-% \item Simplification de nuages.
-% \item Surface de l'eau.
-% \end{itemize}
-% \end{frame}
+\section{Rendu}
-% \subsection{Ray casting}
+\subsection{Isosurfaces}
+\begin{frame}
+ \frametitle{Isosurfaces}
+ \begin{itemize}
+ \item Metaballs % TODO : écran de veille / screenshot.
+ \item Surface 2D d'un bruit 3D.
+ \item Simplification de nuages.
+ \item Surface de l'eau.
+ \end{itemize}
+\end{frame}
-% \begin{frame}
-% \frametitle{Ray casting}
-% \begin{itemize}
-% \item Très simple, très petit code.
-% % TODO : Schéma d'explication
-% \item Sampling
-% \item Très lent
-% \item Démonstration
-% \item Monte Carlo
-% \end{itemize}
-% \end{frame}
+\subsection{Ray casting}
-% \section[LOD]{Niveau de détail}
+\begin{frame}
+ \frametitle{Ray casting}
+ \begin{itemize}
+ \item Très simple, très petit code.
+ % TODO : Schéma d'explication
+ \item Sampling
+ \item Très lent
+ \item Démonstration
+ \item Monte Carlo
+ \end{itemize}
+\end{frame}
-% \subsection{ROAM}
-% \begin{frame}
-% \frametitle{ROAM}
-% \begin{itemize}
-% \item Triangle bintree.
-% % TODO : Figure : triangle avec 2 fils.
-% \item Split et merge. CLOD.
-% % TODO : Figure : split forcé, merge d'un losange.
-% \item Défaut maximal visible à l'écran.
-% % TODO : Figure : Dessin projection pavé triangle erreur à l'écran.
-% \item Split queue et Merge queue.
-% % TODO : queues l'une au-dessus de l'autre, montrer qu'on va +- les priorités pour éviter le chevauchement.
-% \item Frustum culling : utilisation de drapaux.
-% \item Améliorations~:
-% \begin{itemize}
-% \item Triangle stripping.
-% \item Geomorphing.
-% \item Calcul différé des priorités dans les queues.
-% \item Temps réel.
-% \end{itemize}
-% \item $O(\text{Nb triangles mis à jour})$
-% \end{itemize}
-% \end{frame}
+\section[LOD]{Niveau de détail}
-% \subsection{Geometry clipmaps}
-% \begin{frame}
-% \frametitle{Geometry clipmaps}
-% \begin{itemize}
-% \item Carrés concentriques avec des LOD différents.
-% \item Comme le mipmapping de textures.
-% \item Utilisation forte du GPU.
-% \item Displacement shader.
-% \item Remplissage à la jointure des LOD.
-% \end{itemize}
-% \end{frame}
+\subsection{ROAM}
+\begin{frame}
+ \frametitle{ROAM}
+ \begin{itemize}
+ \item Triangle bintree.
+ % TODO : Figure : triangle avec 2 fils.
+ \item Split et merge. CLOD.
+ % TODO : Figure : split forcé, merge d'un losange.
+ \item Défaut maximal visible à l'écran.
+ % TODO : Figure : Dessin projection pavé triangle erreur à l'écran.
+ \item Split queue et Merge queue.
+ % TODO : queues l'une au-dessus de l'autre, montrer qu'on va +- les priorités pour éviter le chevauchement.
+ \item Frustum culling : utilisation de drapaux.
+ \item Améliorations~:
+ \begin{itemize}
+ \item Triangle stripping.
+ \item Geomorphing.
+ \item Calcul différé des priorités dans les queues.
+ \item Temps réel.
+ \end{itemize}
+ \item $O(\text{Nb triangles mis à jour})$
+ \end{itemize}
+\end{frame}
-% \subsection{Notre algo}
-% \begin{frame}
-% \frametitle{Notre algorithme}
-% \begin{itemize}
-% \item Quadtree de carrés.
-% % TODO : figure
-% % TODO : figure trous dans le mesh
-% \item Triangle fans.
-% \item LOD en fonction de la distance.
-% \item Mise à jour de quelques branches seulement.
-% \item Temps réel.
-% \item $O(\text{Nb triangles mis à jour})$
-% \end{itemize}
-% \end{frame}
+\subsection{Geometry clipmaps}
+\begin{frame}
+ \frametitle{Geometry clipmaps}
+ \begin{itemize}
+ \item Carrés concentriques avec des LOD différents.
+ \item Comme le mipmapping de textures.
+ \item Utilisation forte du GPU.
+ \item Displacement shader.
+ \item Remplissage à la jointure des LOD.
+ \end{itemize}
+\end{frame}
-% \subsection{Streaming de scène}
-% \begin{frame}
-% \frametitle{Streaming de scène}
-% \begin{itemize}
-% \item Modèle client/serveur.
-% \item Tiles avec LOD maximal.
-% \item Qualité progressive des tiles.
-% \item Geometry clipmaps.
-% \item \texttt{/usr/lib/xscreensaver/crackberg}
-% \end{itemize}
-% \end{frame}
+\subsection{Notre algo}
+\begin{frame}
+ \frametitle{Notre algorithme}
+ \begin{itemize}
+ \item Quadtree de carrés.
+ % TODO : figure
+ % TODO : figure trous dans le mesh
+ \item Triangle fans.
+ \item LOD en fonction de la distance.
+ \item Mise à jour de quelques branches seulement.
+ \item Temps réel.
+ \item $O(\text{Nb triangles mis à jour})$
+ \end{itemize}
+\end{frame}
-% % \section{Conclusion}
+\subsection{Streaming de scène}
+\begin{frame}
+ \frametitle{Streaming de scène}
+ \begin{itemize}
+ \item Modèle client/serveur.
+ \item Tiles avec LOD maximal.
+ \item Qualité progressive des tiles.
+ \item Geometry clipmaps.
+ \item \texttt{/usr/lib/xscreensaver/crackberg}
+ \end{itemize}
+\end{frame}
-% % \begin{frame}
-% % \frametitle{Conclusion}
-% % \end{frame}
+% \section{Conclusion}
% \begin{frame}
-% \frametitle{Sources}
-% % Génération
-% % * [Différents algos]() : Ridged Perlin Noise, Hills Algorithm, Craters, Erosion.
-% % * [Plein d'algos](http://planetgenesis.sourceforge.net/docs15/noise/noise.html#tileworley) dont plusieurs basés sur une sorte de voronoi donc à priori trop lents.
-% % * Affichage avec Ogre : [forum](http://www.ogre3d.org/forums/viewtopic.php?f=5&t=67177&p=442222), [doc](http://www.ogre3d.org/docs/api/html/classOgre_1_1BillboardSet.html)
-% \begin{itemize}
-% \item http://www.gamasutra.com
-% \item http://vterrain.org
-% % \item Mojoworld generator (mojoworld.org)
-% \item http://world-machine.com
-% \item Algorithmes de bruit {\tiny http://www.sluniverse.com/php/vb/project-development/34994-automatically-generated-terrain-map.html}
-% \item Composition d'algorithmes de bruit {\tiny http://www.gamedev.net/blog/33/entry-2249260-procedural-islands-redux/}
-% \item Création de cartes polygonales {\tiny http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/}
-% \item Pathfinding pour créer des rivières {\tiny http://www.umbrarumregnum.net/articles/creating-rivers}
-% \end{itemize}
+% \frametitle{Conclusion}
% \end{frame}
+\begin{frame}
+ \frametitle{Sources}
+% Génération
+% * [Différents algos]() : Ridged Perlin Noise, Hills Algorithm, Craters, Erosion.
+% * [Plein d'algos](http://planetgenesis.sourceforge.net/docs15/noise/noise.html#tileworley) dont plusieurs basés sur une sorte de voronoi donc à priori trop lents.
+% * Affichage avec Ogre : [forum](http://www.ogre3d.org/forums/viewtopic.php?f=5&t=67177&p=442222), [doc](http://www.ogre3d.org/docs/api/html/classOgre_1_1BillboardSet.html)
+ \begin{itemize}
+ \item http://www.gamasutra.com
+ \item http://vterrain.org
+ % \item Mojoworld generator (mojoworld.org)
+ \item http://world-machine.com
+ \item Algorithmes de bruit {\tiny http://www.sluniverse.com/php/vb/project-development/34994-automatically-generated-terrain-map.html}
+ \item Composition d'algorithmes de bruit {\tiny http://www.gamedev.net/blog/33/entry-2249260-procedural-islands-redux/}
+ \item Création de cartes polygonales {\tiny http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/}
+ \item Pathfinding pour créer des rivières {\tiny http://www.umbrarumregnum.net/articles/creating-rivers}
+ \end{itemize}
+\end{frame}
+
\end{document}