%-*-LaTeX-*-

\section{L'interface}\label{interf}
L'interface est compos\'ee de trois parties visibles principales permettant d'acc\'eder
aux fonctionnalit\'es du logiciel.
Une fen\^etre principale avec une barre de menu en haut et une zone de visualisation du
monde, et une palette flottante d'options utiles au modelage des objets.

\subsection{La barre de menu}
La barre de menu contient tous les \'el\'ements de gestion du logiciel et d'options.
Le menu {\bf{File}}\footnote{Fichier} sert \`a la gestion des entr\'ees/sorties sur fichier des sc\`enes
(voir section \ref{formats} \pageref{formats} pour des informations sur les formats utilis\'es et reconnus).
\newline
Le menu {\bf{View}}\footnote{Vues} sert pour le choix entre les modes de vue utilisateurs pr\'ed\'efinis
et la vue cam\'era. Pour le mode de vue utilisateur, le logiciel offre le choix entre
plusieurs vues planes comme la vue de face, de c\^ot\'e, ou de profil (voir section \ref{vues}
page \pageref{vues}).
\newline

Le menu {\bf{Animation}} permet de rentrer en mode de programmation d'animation. Ce sujet est
d\'ecrit en detail dans la section \ref{anim-mode-emploi} page \pageref{anim-mode-emploi}.
\newline
Le menu {\bf{Network}}\footnote{R\'eseau} permet de passer en mode de modelage r\'eseau avec plusieurs ordinateurs
reli\'es. Ce sujet est trait\'e dans la section \ref{reseau} page \pageref{reseau}.
\newline
Enfin, le menu {\bf{Help}}\footnote{Aide} donne la bo\^ite de dialogue de version du logiciel.


\subsection{La fen\^etre de visualisation}
La fen\^etre de visualisation sous la barre de menu est notre vision sur le monde de Xblob.
C'est dans cette fen\^etre que l'utilisateur va cr\'eer sa sc\`ene et placer ses objets.
Sous cette fen\^etre se trouve une s\'erie de trois boutons permettant de choisir un mode 
de d\'eplacement ou de rotation des objets. Une ou deux directions peuvent \^etre choisies
simultan\'ement \'etant donn\'e que le monde de Xblob est en trois dimensions et que la souris
ne nous permet facilement que de faire des mouvements dans deux dimensions en m\^eme temps.
\newline
La zone en dessous des boutons sert \`a afficher les messages d'aide en ligne du logiciel.

\subsection{La \textit{tool blob}}
La \textit{tool blob} est la palette volante d'outils permettant \`a l'utilisateur de modeler
sa sc\`ene.
Elle est divis\'ee en trois parties :
\subsubsection{Choix d'un \'emetteur}
Le premier bouton sert \`a choisir le type de l'\'emetteur, parmi
les cinq existants, que l'on veut cr\'eer dans la sc\`ene.

\subsubsection{Choix d'un mode de rendu}
Le deuxi\`eme bouton permet \`a l'utilisateur de choisir un mode de rendu\index{Rendu}, soit pour visualiser
sa sc\`ene dans un mode de rendu r\'ealiste (\textit{gouraud, phong, raytracing}), soit pour le 
modelage plus ou moins rapide des objets dans la sc\`ene.
\\Le premier mode \textit{nothing} n'affiche pas la g\'en\'eration de la forme facett\'ee et est par
cons\'equent le plus rapide des modes de repr\'esentation.
\\Le mode \textit{flat}, quant \`a lui, permet de voir la position des sources de lumi\`ere par rapport
aux objets.
\subsubsection{Choix de l'action \`a effectuer}
Enfin, dans la partie basse de la bo\^ite \`a outils, l'utilisateur va pouvoir choisir le type
d'action qu'il d\'esire effectuer dans la sc\`ene.
\\Trois types d'actions existent : cr\'eation (voir section \ref{creation} page \pageref{creation},
\'edition  (voir section \ref{edition} page \pageref{edition}),
s\'election (voir section \ref{selection} page \pageref{selection}).
Le choix des objets sur lesquels se portent les actions \'edition et s\'el\'ection est choisi
par l'appui sur un des types d'objets list\'e au dessus du choix de l'action.
\newline
De plus, d'autres actions sont possibles \`a travers l'utilisation du troisi\`eme bouton de la souris
dans la fen\^etre de visualisation. L'appui sur ce bouton ouvre un menu dans lequel l'utilisateur
aura le choix, suivant le type d'objet choisi, de le d\'etruire ou bien d'\'editer ses propri\'et\'es.

\subsection{Composition d'une sc\`ene}
\subsubsection{Les diff\'erentes vues et la cam\'era} \label{vues}
La vision du monde dans Xblob passe par la cam\'era, comme un cin\'easte pour filmer ses sc\`enes.
En plus de la cam\'era, qui permet de visualiser la sc\`ene sous n'importe quel angle, Xblob est 
pourvu de vues utilisateurs planes pr\'ed\'efinies qui offrent une aisance suppl\'ementaire dans
le modelage des objets dans la sc\`ene.
\newline
Pour se d\'eplacer dans le monde et \'etablir une vue, l'utilisateur \`a la possibilit\'e, soit
d'agrandir ou r\'etr\'ecir son champ de vision\footnote{touche Shift enfonc\'e + bouton du milieu 
de la souris press\'e + mouvement vertical de la souris.} (ce qui correspond \`a un zoom), 
soit d'effectuer une rotation de la cam\'era virtuelle\footnote{touche Shift enfonc\'e + mouvement 
de la souris.} autour du centre du monde.
\newline
La visualisation de l'image s'effectuera toujours \`a partir de la vue courante.
\subsubsection{Les objets}
Les objets pouvant \^etre cr\'e\'es dans la sc\`ene sont des m\'etaformes, constitu\'ees d'\'emetteurs.
Au d\'emarrage du logiciel, la sc\`ene est vide, et la cam\'era fixe le centre du monde.
\newline
Une m\'etaforme est donc constitu\'ee d'\'emetteurs, de types vari\'es.
\paragraph{Attributs d'une m\'etaforme :}
Elle a comme attribut un seuil \'energ\'etique sur lequel on va placer sa peau. En fait, ce seuil
repr\'esente la valeur d\'energie dans l'espace o\`u la surface de la forme sera dessin\'ee.
\paragraph{Attributs des \'emetteurs :}
Un \'emetteur a comme attributs sa fonction d'\'energie, donc la fonction de la distance qui donne
la valeur de l'\'energie d\'egag\'ee par cet \'emetteur en un point P de l'espace. Si cette \'energie est
inf\'erieure au seuil de la m\'etaforme dans laquelle se trouve l'\'emetteur, alors le point est en dehors de
la m\'etaforme, dans le cas contraire, il est dans la m\'etaforme.
Un autre attribut de l'\'emetteur est sa puissance d'\'emission, plus celle-ci est importante,
plus l'\'emetteur aura d'influence sur l'espace autour de lui.

\subsection{La cr\'eation d'objets dans la sc\`ene}\label{creation}
La cr\'eation d'objets dans la sc\`ene se fait tout d'abord par le choix du mode de cr\'eation pour l'action
dans la bo\^ite \`a outils flottante, puis le choix d'un type d'\'emetteur en haut de la palette d'outils.
\newline La cr\'eation de l'\'emetteur se fait par un click sur le bouton gauche de la souris
dans la fen\^etre de
visualisation, \`a l'endroit o\`u l'on veut voir l'\'emetteur appara\^itre.
\subsubsection{Emetteur point :}
Pour l'\'emetteur point, un simple click suffit.
\subsubsection{Emetteur segment :}
Pour l'\'emetteur segment, le premier click place le point de d\'epart du segment, et un second click le point de fin.
\subsubsection{Emetteur triangle :}
Pour l'\'emetteur triangle, le premier click place le premier sommet du triangle, puis les deux suivant placent
les deux autres sommets du triangle.
\subsubsection{Emetteurs lignes bris\'ees et r\'eseau de facettes :}
Pour les \'emetteurs ligne et reseaux de facettes, le premier click commence la cr\'eation de l'\'emetteur puis
chaque click suivant rajoute un point \`a l'\'emetteur. Pour terminer la cr\'eation, il suffit d'appuyer sur le
bouton du milieu de la souris.
\newline
\newline
Si la sc\`ene est vide de tout objet, alors la cr\'eation du premier \'emetteur entra\^{\i}nera automatiquement la
cr\'eation d'une m\'etaforme pour le contenir.
\newline
Tout objet cr\'e\'e est d'office s\'electionn\'e (voir la section \ref{selection} page \pageref{selection}),
pour rajouter un \'emetteur \`a une
m\'etaforme, il faut que celle-ci soit s\'el\'ectionn\'ee. Si aucune m\'etaforme n'est s\'el\'ectionn\'ee dans 
la sc\`ene lors de la cr\'eation d'un nouvel \'emetteur, une nouvelle m\'etaforme est cr\'e\'ee pour cet \'emetteur.
\newline
Les \'emetteurs dans une m\^eme m\'etaforme rentrent en interaction, alors que des \'emetteurs dans deux 
m\'etaforme distincts n'interagissent pas du tout ensemble.

\subsection{La s\'election des objets}\label{selection}
Pour s\'electionner des objets, il faut d'abord rentrer dans le mode selection d'objets correspondant \`a l'appui
sur le bouton d'action ``s\'election''. Ensuite, on choisi le type d'objet que l'on veut s\'electionner
en positionnant
les boutons de choix soit sur ``metaform'', soit sur ``emittor'', soit sur ``point''
(point(s) constituant un \'emetteur).
\newline
Ensuite, pour le s\'election des objets proprement dite, il suffit d'aller sur la fen\^etre de s\'election et
d'appuyer soit sur le bouton du milieu de la souris pour s\'electionner le type d'objet le plus proche de la
souris, soit sur le bouton gauche en restant appuyer pour d\'efinir une zone de s\'election des objets.
Tout objet inclus enti\`erement dans cette zone se trouvera selectionn\'e. 
Par d\'efaut, la s\'election d'objet entra\^{\i}ne la d\'eselection de tous les objets pr\'ecedemment selectionn\'es.
Pour emp\^echer cela, il suffit de garder enfonc\'e la touche \textit{ctrl} du clavier (s\'election multiple).
\newline
Un bouton dans la bo\^ite \`a outils permet de d\'es\'electionner tous les objets.
\newline
Les objets selectionn\'es sont dessin\'es d'une autre couleur dans la fen\^etre de visualisation.

\subsection{L'\'edition des objets et la modification de leurs attributs}\label{edition}

\subsubsection{Edition}
Pour pouvoir \'editer des objets dans le monde, c'est \`a dire pouvoir modifier leur positionnement dans l'espace,
il faut se placer dans le mode d'\'edition dans la palette d'outils.
Ensuite, on choisi le type d'objet que l'on
d\'esire modifier, de la m\^eme mani\`ere que pour la s\'election, \`a un detail pr\`es, c'est que pour ce mode l\`a,
on peut effectuer les modification sur l'ensemble de la s\'election plut\^ot que sur un type particulier
d'\'emetteur.
\newline
Une fois le type d'objet selectionn\'e pour la modification spatiale, le bouton gauche de la souris permettra de 
faire bouger l'objet dans le monde relativement \`a l'orientation des axes du monde.
\newline
Les trois boutons en dessous de la fen\^etre de visualisation voient ici leur inter\^et puisqu'il permettent
de choisir
les axes de d\'eplacement des objets, avec au maximum deux directions simultan\'emment.

\subsubsection{Modification des attributs}
Pour modifier les attributs d'une m\'etaforme ou d'un \'emetteur,
il faut cliquer avec le bouton droit dans la fen\^etre de visualisation pr\`es de l'objet
en question (c'est l'objet le plus proche du ``click'' souris qui
est s\'electionn\'e). Si on veut modifier les attributs d'un ensemble d'objets
dej\`a s\'electionn\'e (mode s\'election courante), il suffit de cliquer avec le bouton
droit n'importe o\`u dans la fen\^etre de visualisation.
\\Le ``click'' souris entra\^{\i}ne l'apparition d'une fen\^etre qui permet de choisir
l'attribut que l'on d\'esire modifier.
\\Une fen\^etre appara\^{\i}t alors permettant de changer :
\begin{itemize}
\item{La puissance d'un \'emetteur : entrer la valeur dans la case de saisie
``Power'', puis appuyer sur le bouton ``Change''. La puissance de l'\'emetteur
s\'electionn\'e est modifi\'ee, on voit la m\'etaforme changer de forme.}

\item{Le seuil \'energ\'etique d'une m\'etaforme (celle s\'electionn\'ee ou celle contenant l'\'emetteur
actuellement s\'electionn\'e) : entrer la valeur dans la case de saisie ``Treshold'',
puis appuyer sur le bouton ``Change''. La m\'etaforme change alors de forme.}

\item{La fonction d'\'energie d'un \'emetteur : appuyer sur le bouton ``Change''
de la partie ``Energie function'' de la fen\^etre d'attributs, une nouvelle fen\^etre
appara\^{\i}t alors, o\`u l'on voit dans la partie sup\'erieure la courbe de la fonction
d'\'energie actuellement associ\'ee \`a l'\'emetteur. Comme nous l'avons vu dans la
section \ref{fonction-energie} page \pageref{fonction-energie}, le logiciel
permet de choisir entre des fonctions d'\'energies pr\'edefinies et des fonctions
que l'on peut soit m\^eme d\'efinir.
\begin{itemize}
\item{Pour choisir une fonction pr\'edefinie, enfoncer le bouton de choix
``Predefined functions'', puis choisir dans le menu ``Predefined'' la
fonction d\'esir\'ee. Sa courbe appara\^{\i}t alors dans la partie sup\'erieure de
la fen\^etre, et la m\'etaforme change de forme prenant en compte la nouvelle
fonction d'\'energie pour le ou les \'emetteurs s\'electionn\'es.}
\item{Proc\'eder de la m\^eme mani\`ere pour choisir une fonction utilisateur (menu
``User defined'') dej\`a d\'efinie.}
\item{Pour d\'efinir une nouvelle fonction d'\'energie, appuyer sur le bouton
``Define a new function'' puis dessiner la courbe de la fonction (le logiciel
emp\^eche, comme nous l'avons vu dans la section \ref{fonction-energie} page
\pageref{fonction-energie}, de d\'efinir des fonctions non valides : c'est \`a
dire non monotones d\'ecroissantes), ensuite, lorsque la courbe est satisfaisante,
appuyer sur le bouton ``Record'' pour enregistrer la nouvelle fonction, le logiciel
demande alors \`a l'utilisateur de donner un non \`a celle ci.}
pour enregistrer la
\end{itemize}
}
\end{itemize}

Remarque : 
\newline En ce qui concerne les modifications de la puissance et de la fonction
d'\'energie, les \'emetteurs modifi\'es d\'ependent du mode de selection :
\begin{itemize}
\item{Pour le mode de s\'election \'emetteur, l'\'emetteur modifi\'e est celui qui
est s\'electionn\'e.}
\item{Pour le mode de s\'election m\'etaforme, tous les \'emetteurs de la m\'etaforme
s\'electionn\'ee sont modifi\'es.}
\item{Pour le mode s\'election courante, tous les \'emetteurs s\'electionn\'es ainsi
que tous les \'emetteurs de toutes les m\'etaformes s\'electionn\'ees sont modifi\'ees.}
\end{itemize}


\subsection{L'animation des \'el\'ements dans la sc\`ene}\label{anim-mode-emploi}

Notre logiciel offre la possiblit\'e de cr\'eer des sc\`enes anim\'ees.
Le principe de l'animation se base sur une technique d'animation par cles
et d'interpolation (voir section \ref{anim-technique} page \pageref{anim-technique}).

\subsubsection{Exemple}
On veut cr\'eer une animation de 50 images d'une m\'etaforme grossissante
et se depla\c{c}ant pendant 25 images vers le haut puis 25 images vers le bas.
Pour cela, il faut se placer \`a l'image 25 et positionner la m\'etaforme
au dessus de sa position initiale, puis il faut aller \`a l'image 50,
la positionner plus bas et mettre \`a ses \'emetteurs une puissance plus grande pour
produire l'effet de grossissement.
Ceci peut \^etre r\'ealis\'e de mani\`ere tr\`es simple, en effet il suffit
de suivre les proc\'edures ci-dessous. La figure \ref{anim-fig}
page \pageref{anim-fig} illustre cet exemple.

\begin{enumerate}
\item{Se mettre en mode animation en cliquant dans le menu
"Animation" sur ``Animate''. Une fen\^etre appara\^{\i}tra contenant
des outils de contr\^ole pour l'animation.}
\item{Le nombre d'images pour l'animation doit \^etre mis \`a la
valeur souhait\'ee (50 pour notre exemple) en cliquant sur 
le bouton change \`a c\^ot\'e de l'indicateur de nombre d'image.}
\item{Se placer sur l'image que l'on souhaite modifier (ici la 25)
\`a l'aide de l'ascenceur horizontal contenu dans la fen\^etre
de contr\^ole d'animation.}
\item{Changer les valeurs des attributs \`a l'aide de l'interface,
ici translater la m\'etaforme vers le haut.}
\item{Enregistrer la modification (cr\'eation d'une cl\'e) avec le bouton 
``record'' dans la fen\^etre de contr\^ole d'animation.}
\item{Cliquer sur Animate pour lancer l'animation.}
\end{enumerate}

Sur notre exemple il faudrait encore, avant de cliquer
sur Animate:

\begin{enumerate}
\setcounter{enumi}{5}
\item{Se placer sur l'image 50
\`a l'aide de l'ascenceur horizontal contenu dans la fenetre
de contr\^ole d'animation. Translater vers le bas et augmenter
la puissance des \'emetteurs de la m\'etaforme.}
\item{enregistrer la modification avec le bouton record dans la fen\^etre
de contr\^ole d'animation.}
\item{Cliquer sur Animate pour lancer l'animation.}
\end{enumerate}


\subsubsection{Remarques}
\begin{itemize}
\item{Si on se positionne \`a l'aide de l'ascenceur horizontal
sur une image qui n'a pas de cl\'e associ\'ee et qu'elle
se situe entre 2 cles, l'image vue sera l'image interpol\'ee
par rapport aux cles encadrantes (interpolation de tous les
attributs).}
\item{Si on se positionne, \`a l'aide de l'ascenceur horizontal,
sur une image qui n'a pas de cl\'e associ\'ee, et qu'il n'existe
pas de cl\'e r\'ef\'erencant une image plus "lointaine" (de num\'ero sup\'erieur
\`a l'image courante) alors l'image vue sera l'image referenc\'ee par la
cl\'e la plus proche dans le pass\'e (forc\'ement!).}
\end{itemize}


\begin{figure}[h]
\begin{center}
\includegraphics[scale=0.7]{graphics/anim-fig.eps}
\end{center}
\caption{Illustration d'une animation\label{anim-fig}}
\end{figure}

\section{Importation et exportation, formats}\label{formats}
La barre de menu de Xblob permet d'acc\'eder aux fonctionnalit\'es d'entr\'ees/sorties.
\newline
Les boutons ``Load'' et ``Save'' du menu ``File'' permettent de charger et sauvegarder au format
interne de Xblob (Format RAW).
Il suffit simplement de donner le nom du fichier lorque le s\'electeur de fichier appara\^{\i}t.
\newline
Il existe aussi les sous menus ``Import'' et ``Export'' qui permettent de sauvegarder la sc\`ene
dans un format reconnu par d'autres logiciels. Il s'agit des formats 3DS, VRML et OBJ.
Comme pr\'ec\'edemment, il suffit de donner le nom du fichier que l'on veut charger/sauvegarder.

Remarque : il est recommand\'e de donner une extension correspondant au format du fichier.
L'extension ``.3DS'' pour les fichiers de 3D Studio, ".WRL" pour les fichiers VRML et ".OBJ"
pour les fichiers au format OBJ.
Cela permet d'identifier le fichier imm\'ediatement et de plus, lorque l'on invoque xblob
avec l'option -import, il ne tient compte que de l'extension du fichier.
	

\section{Mod\'elisation d'une sc\`ene \`a plusieurs : la couche r\'eseau} \label{reseau}
Nous avons rajout\'e une couche r\'eseau sur notre logiciel Xblob. Elle permet une centralisation
de la sc\`ene de travail.
\\Chaque instance du programme Xblob peut \^etre ou client ou serveur.
Le serveur et tous ces clients vont pouvoir
\'editer la m\^eme sc\`ene en m\^eme temps, qui \'evoluera en parallele sur toutes les machines.
\newline
Utilisation :
\begin{itemize}
\item{Serveur :
\newline
Il faut qu'il y ait un serveur qui tourne sur une machine X. Pour mettre une instance de Xblob
en mode serveur, il suffit d'appuyer sur le bouton ``server'' du menu ``Network'' de la barre
de menu.
Ensuite la sc\`ene \'editee devient
visible et \'editable par tous les clients qui se connectent.
C'est le serveur qui centralise et traite les demandes de modifications de la sc\`ene provenant
des clients. Le serveur pr\'evient tous les clients de la prise en compte d'une modification
dont lui, ou un des clients est \`a l'origine.}

\item{Client :
\newline
Pour se connecter \`a un serveur, il suffit de cliquer sur le bouton ``client'' de la barre
de menu.
Une boite de dialogue appara\^{\i}tra et le nom de la machine h\^ote du serveur sera demand\'e.
Ceci fait, le client se connecte au serveur et re\c{c}oit une message de bienvenue
et la sc\`ene de travail dans l'\'etat exact dans laquelle elle se trouve chez le serveur.}
\end{itemize}

Remarque : seule la sc\`ene est commune, chaque instance de Xblob a ses propres cam\'eras et peut se deplacer
de mani\`ere ind\'ependante
dans la sc\`ene. Chaque instance a son propre mode de rendu\index{Rendu} (par exemple le serveur verra la scene en fil de fer
alors qu'un de ses clients pourra visualiser cette sc\`ene en gouraud (ou tout autre mode)).


\section{Installation du logiciel xblob}

\subsection{Installation}
Le logiciel xblob est simple \`a installer. Il se pr\'esente sous la forme compress\'ee d'une archive au format Tar.
Sous UNIX, il suffit simplement de taper la commande suivante: 'gzip -d xblob.tgz | tar -xvf'
Cela a pour cons\'equences de vous cr\'eer un r\'epertoire dans lequel se trouvent toutes les sources du logiciel ainsi
que le man et des fichiers d'informations.
Il faut ensuite cr\'eer l'\'ex\'ecutable en compilant ces sources, ceci gr\^ace \`a la commande 'make'.
Le fichier MetaForm\_Modeler des ressources Motif doit \^etre copi\'e (ou bien faire un lien)
dans le r\'epertoire \$XAPPLRESDIR (souvent ~/.app-defaults).
Une fois la compilation termin\'ee, le programme xblob est cr\'e\'e et il est pr\^et \`a \^etre utilis\'e.


\subsection{Lancement du logiciel}

On peut lancer xblob tout simplement en lan\c{c}ant la commande 'xblob'.
\newline
Xblob peut prendre plusieurs param\`etres sur la ligne de commande. Voici les diff\'erentes options possibles :
(les options suivies de OPTn signifie que ces options requi\`erent n arguments).
\begin{itemize}
\item{-load file
\newline o\`u file peut \^etre soit du type RAW, soit du BMF ou encore du MAF (Metaform Animation Format).}
\item{-import file
\newline o\`u file est soit du type 3DS, soit VRML, soit OBJ}
\item{-render file
\newline o\`u file est le nom du fichier dans lequel sera sauvegard\'e le r\'esultat}
\item{-info 
\newline pour avoir des informations sur xblob}
\item{-version}
\end{itemize}

\paragraph{Explication des diff\'erentes options}

Les options -load et -import permettent de charger d\`es le lancement de xblob un fichier. Ainsi la sc\`ene sera d\'ej\`a compos\'ee
d'une ou plusieurs m\'etaformes suivant le contenu du fichier lu.
\newline
L'option 'render' doit imp\'erativement \^etre la premi\`ere option de la ligne de commande. Celle-ci permet de ne pas lancer
l'interface de xblob mais simplement de lire un fichier (option load ou import) et de calculer le
rendu\index{Rendu}
en raytracing\index{Raytracing}.
Le r\'esulat sera stock\'e dans le fichier pass\'e en param\`etre pour cette option.
\newline
Par d\'efaut xblob lancera son interface et permettra ainsi \`a l'utilisateur de mod\'eliser \`a sa guise.


\endinput