I. Introduction▲
Dans cet article, je vais présenter une méthode simple pour parvenir à développer une application 3D à l'aide de la bibliothèque OpenGL pour Java JOGL, et de l'Environnement de Développement Intégré Eclipse. Par contre cela ne représentera ni un cours sur la programmation OpenGL, ni un cours sur l'utilisation de JOGL 2. C'est juste pour montrer comment on peut facilement utiliser JOGL avec Eclipse.
Évidemment, l'application ne sera pas très volumineuse (ce sera juste une sphère qui tourne sur elle-même) : mais cela sera suffisant pour vous présenter ma méthode.
Nous verrons également comment exporter l'application en archives autoexécutables pour différents OS (et plusieurs architectures : 32 ou 64 bits).
II. Prérequis▲
- Tout d'abord, veuillez installer le JDK d'Oracle le plus à jour (version 7 à ce jour), correspondant à votre système d'exploitation : page de téléchargement d'Oraclepage de téléchargement d'Oracle.
- Veuillez télécharger l'EDI Eclipse le plus à jour (Eclipse Juno à ce jour), correspondant à votre système d'exploitation : page de téléchargement d'Eclipsepage de téléchargement d'Eclipse.
- Veuillez, si ce n'est déjà fait, installer l'utilitaire 7 zip7 zip (si vous êtes sur Linux, il devrait déjà être présent dans votre gestionnaire de paquets).
- Veuillez enfin télécharger et décompresser la bibliothèque JOGLJOGL, peu importe l'endroit, pourvu que vous la retrouviez ultérieurement : nous voulons les archives glugen-javadoc.7z, jogamp-all-platforms.7z, et jogl-javadoc.7z .
III. Création des bibliothèques personnalisées JOGL▲
Nous allons créer des bibliothèques personnalisées pour JOGL : il suffira alors de les intégrer à nos projets (ce que nous verrons ultérieurement dans cet article) pour développer avec JOGL. Il y aura un socle commun JOGL_CORE, et une bibliothèque par couple OS/architecture (JOGL_Win_32, par exemple).
III-A. Création de la bibliothèque JOGL_Core▲
Veuillez ouvrir le menu Windows->Preferences, et filtrer les préférences en commençant à taper user libraries dans le champ de recherche. Veuillez alors sélectionner ce menu.
Veuillez alors cliquer sur le bouton new pour créer une nouvelle bibliothèque personnalisée.
Veuillez alors saisir le nom de la nouvelle bibliothèque (jogl_core) et vérifier que la case à cocher System Library est décochée.
Votre bibliothèque vient d'être ajoutée : mais elle est vide. Cliquez sur le bouton Add Jars (après vous être assuré que la bibliothèque est sélectionnée).
Veuillez, avec l'explorer qui vous est alors soumis, vous rendre dans le dossier de l'archive jogamp-all-platforms.7z décompressée précédemment. Veuillez entrer dans le sous-dossier jars, et sélectionner les deux fichiers suivants (avec la touche CTRL en même temps que le clic, au besoin) :
- jogl-all.jar ;
- gluegen-rt.jar.
Vous verrez donc que des « liens » ont été ajoutés sur vos jars. Pour chacun d'eux, on peut alors distinguer quatre nœuds enfants :
- le lien vers les sources du jar : il est possible de les télécharger sur la page de jogamp que je vous ai déjà donnée, mais je n'ai pas choisi de m'en préoccuper dans l'article. Cela dit, la procédure n'a rien de compliqué ;
- le lien vers la javadoc du jar ;
- le lien vers les fichiers natifs (codés en C/C++) du jar ;
- la définition des fichiers à exclure de la bibliothèque : nous n'aurons pas besoin de cette fonctionnalité.
Ici, nous ne remplirons que le nœud javadoc des deux jars : en effet, même si la bibliothèque JOGL est basée sur l'utilisation de fichiers natifs, comme ils sont déjà fournis dans des jars on n'aura pas besoin de renseigner le nœud natives library. Il suffira donc d'ajouter des liens sur les différents jars contenant ces fameux fichiers. Ce que nous ferons ultérieurement dans cet article.
Renseigner le nœud javadoc permet notamment à Eclipse de bien nommer les arguments des méthodes de JOGL implémentées ou redéfinies. Par exemple avoir
draw
(
int
widht, int
height)
(la méthode draw est factice), au lieu de
draw
(
int
arg0, int
arg1)
Ce qui déjà nous facilite bien le travail : on n'est plus forcé d'aller regarder sur la documentation de JOGL pour savoir comment s'en servir.
Veuillez double-cliquer sur le nœud du jar glugen-rt. Veuillez alors sélectionner l'option Javadoc URL et cliquer sur le bouton Browse.
Veuillez alors sélectionner le chemin où vous avez décompressé la javadoc de gluegen, et sélectionner le sous-dossier javadoc. Le bouton Validate sert à certifier que le chemin est bien celui correspondant à une javadoc.
Veuillez faire de même avec le nœud javadoc du jar jogl-all : bien sûr en choisissant le sous-dossier javadoc de l'archive jogl-javadoc décompressée.
La bibliothèque jogl_core est maintenant définie : il ne manque plus que les différentes bibliothèques natives.
III-B. Création des bibliothèque s natives de JOGL▲
Nous allons d'abord créer la bibliothèque JOGL_natives_Windows_32. La procédure sera similaire pour toutes les bibliothèques.
- Cliquez sur le bouton New, laissez le bouton System Library décoché, et nommez-la (jogl_natives_windows_32).
- Sélectionnez cette nouvelle bibliothèque, cliquez sur Add Jars, et sélectionnez les jars (toujours dans le sous-dossier jars de l'archive jogamp-all-platforms décompressée) gluegen-rt-natives-windows-i586.jar et jogl-all-natives-windows-i586.jar.
Faites de même pour la bibliothèque jogl_natives_windows_64 : en choisissant les jars gluegen-rt-natives-windows-amd64.jar et jogl-all-natives-windows-amd64.jar.
Faites de même pour la bibliothèque jogl_natives_linux_32 : en choisissant les jars gluegen-rt-natives-linux-i586.jar et jogl-all-natives-linux-i586.jar.
Faites de même pour la bibliothèque jogl_natives_linux_64 : en choisissant les jars gluegen-rt-natives-linux-amd64.jar et jogl-all-natives-linux-amd64.jar.
Enfin, pour jogl_natives_mac_osx : choisissez les archives gluengen-rt-macosx-uniersal.jar et jogl-all-natives-macosx-universal.jar.
Veuillez enfin valider les préférences afin de ne pas perdre votre long travail.
IV. Le projet sphère tournante 3d▲
IV-A. Création du projet▲
Veuillez créer un nouveau projet Java. (Soit File->New->Java project si disponible. Ou sinon File->New Project puis dans la nouvelle fenêtre, choisir Java->Java project.) Veuillez ne pas valider tout de suite la création du projet.
Veuillez cliquer sur l'onglet Libraries puis sur le bouton Add Libraries.
Veuillez choisir l'option User Libraries (et cliquer sur le bouton Next). Veuillez alors choisir la bibliothèque jogl_core ainsi que la bibliothèque correspondant au couple votre os/votre architecture (par exemple, jogl_natives_windows_32 pour un Windows d'architecture 32 bits) : n'oubliez pas de cliquer sur Finish.
IV-B. Ajouts des classes▲
Veuillez copier les trois sources suivantes dans votre projet. Pour chaque source :
- Copiez-la dans le presse-papiers ;
- Sélectionnez le nœud src du projet dans la vue Project Explorer (au besoin, Window->Show View->Project Explorer pour la rendre visible) ;
- Collez tout simplement : si le paquetage n'est pas encore créé, Eclipse le fera pour nous. Sinon, le fichier nouvellement créé sera placé dans le bon paquetage !
2.
3.
4.
5.
6.
7.
8.
9.
package
com.gmail.bernabe.laurent.jogl.spinning_sphere;
public
class
AppLauncher {
public
static
void
main
(
String[] args) {
new
MainFrame
(
).setVisible
(
true
);
}
}
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
package
com.gmail.bernabe.laurent.jogl.spinning_sphere;
import
java.awt.event.WindowAdapter;
import
java.awt.event.WindowEvent;
import
javax.media.opengl.GLCapabilities;
import
javax.media.opengl.GLProfile;
import
javax.media.opengl.awt.GLCanvas;
import
javax.swing.JFrame;
import
com.jogamp.opengl.util.FPSAnimator;
public
class
MainFrame extends
JFrame {
public
MainFrame
(
){
setTitle
(
"Lit Sphere Demo, with JOGL"
);
setSize
(
640
, 480
);
GLCapabilities glCapabilities =
new
GLCapabilities
(
GLProfile.getDefault
(
));
GLCanvas glCanvas =
new
GLCanvas
(
glCapabilities);
MyGLEventListener glListener =
new
MyGLEventListener
(
);
glCanvas.addGLEventListener
(
glListener);
add
(
glCanvas);
final
FPSAnimator animator =
new
FPSAnimator
(
glCanvas, 60
);
addWindowListener
(
new
WindowAdapter
(
) {
@Override
public
void
windowClosing
(
WindowEvent e) {
animator.stop
(
);
System.exit
(
0
);
}
}
);
animator.start
(
);
}
private
static
final
long
serialVersionUID =
-
1227038124975588633
L;
}
Si vous lancez le projet (Run->Run As...-> Java Application et choix de la classe AppLauncher) : vous devriez voir apparaître une sphère rouge tournant sur elle-même.
V. Exportation de l'application sur différents systèmes d'exploitation▲
L'exportation de l'application sur différents systèmes d'exploitation/architectures devient alors très simple. Voici la procédure, chaque étape sera détaillée plus loin :
- Si on ne désire pas exporter pour le système hôte, il faut retirer la bibliothèque JOGL personnalisée qui lui correspond du projet. Et conserver la bibliothèque jogl_core ;
- Ajouter la bibliothèque du système pour lequel on désire exporter. (De même que pour l'étape 1, désirable uniquement si on ne veut pas exporter pour le système hôte.) ;
- Exporter l'application en tant qu'archive autoexécutable.
V-A. Modifier le classpath du projet : retirer la bibliothèque JOGL du système hôte et ajouter celle du système cible▲
Tout d'abord, il faut que vous sachiez repérer quelles bibliothèques sont intégrées au classpath de votre projet, et ce, directement depuis le Project Explorer. Ce sont ces nœuds dont l'icône est une pile de livres, sauf un : celui correspondant au JDK Java utilisé.
Sachez tout de même que si nous nous contentons ici d'ajouter des bibliothèques personnalisées, il est également possible d'importer un jar d'une bibliothèque existante dans le projet, puis de l'ajouter au classpath. Ce n'était pas possible pour JOGL, à cause des bibliothèques natives, mais de toute façon, cela dépasse le cadre de l'article.
La capture précédente montre que JoglCore et JoglLinux64 font partie du classpath. JRE System Library est bien sûr un artifice d'Eclipse, nous permettant d'un coup d'œil de voir quel est le JDK utilisé.
On veut donc remplacer JoglLinux64 par, mettons, JoglWindows32.
Veuillez, dans le project explorer, sélectionner le nœud racine du projet, et avec un clic droit, accéder au menu Build Path → Configure Build Path. Dans la fenêtre qui apparaît, cliquez sur l'onglet Libraries.
Pour retirer la bibliothèque « inadaptée » pour l'exportation, rien de plus simple. Il suffit de la sélectionner et de cliquer sur le bouton Remove. Ne vous inquiétez pas, elle sera juste supprimée du projet, pas de votre workspace Eclipse.
Pour ajouter la bibliothèque adéquate, la procédure ressemble beaucoup à celle que nous avons utilisée pour ajouter les bibliothèques lors de la création du projet.
- Veuillez cliquer sur le bouton Add Library.
- Veuillez choisir l'option User Libraries.
- Veuillez cocher sur la bibliothèque à ajouter et valider : si vous avez un message d'erreur, normalement, c'est parce que la bibliothèque fait déjà partie de votre classpath.
Enfin, veuillez ne pas oublier de valider la fenêtre de configuration.
V-B. Exporter l'application en tant qu'archive autoexécutable▲
L'étape précédente, où nous n'avons retenu que la bibliothèque du système cible et la bibliothèque Jogl_core, est ultra importante : de cette manière Eclipse n'exportera dans le jar final que les bibliothèques natives du système cible. (On évite d'ajouter les bibliothèques natives de JOGL correspondant au système hôte, qui n'est pas celui pour lequel nos voulons déployer l'application.) Mais évidemment, pour tester à nouveau l'application, il faudra faire la manipulation inverse : enlever la bibliothèque JOGL du système cible et rétablir la bibliothèque JOGL du système hôte. Néanmoins, cette manipulation n'a rien de fastidieux, comme vous avez pu le remarquer.
Sélectionnez votre projet, et lancez le menu contextuel (par clic droit dessus) Export…
Dans la nouvelle fenêtre qui apparaît, sélectionnez l'option Java-> Runnable Jar File et cliquez sur Next.
L'option Launch Configuration correspond à la classe qui contient la méthode void main(String args[]) que l'on voudra utiliser comme point d'entrée (en effet, il peut y avoir plusieurs classes avec une telle méthode au sein du projet). Choisissez la classe AppLauncher du projet SpinningSphere3D (logique).
Inutile de vous précisez que l'option Export destination, avec le bouton Browse à sa droite, permet de sélectionnez le nom et l'emplacement du fichier à créer. Eclipse acceptant dans la boîte de dialogue les formats jar et zip : n'oubliez pas de préciser l'extension jar.
Enfin l'option Library Handing permet de choisir comment la bibliothèque sera intégrée au jar : choisissez « Extract required libraries into jar » afin que les différents fichiers de la bibliothèque JOGL fassent directement partie intégrante de l'archive générée.
Décochez si ce n'est déjà fait, l'option Save as ANT Script.
Cliquez sur Finish : le message d'avertissement qui apparaît veut vous sensibiliser aux problèmes éventuels de licences. Mais comme JOGL est Open Source, je pense que si votre projet n'est pas commercial, il n'y a pas de problème.
Vous pouvez répéter l'opération (changer le classpath puis exporter en jar autoexécutable) pour les différents systèmes d'exploitation et architectures voulus : cela ne devrait plus représenter trop de difficultés (cliquez donc sur OK si tout est bon pour vous, dans le cas contraire, c'est peut-être à vos risques et périls).
Voilà, c'est tout pour cet article.
VI. Remerciements▲
Je tiens à remercier les responsables du site Developpez.com, me permettant de publier cet article. Je voudrais remercier les modérateurs et responsables mlny84, _max_, littlewhite, keulkeul, gueritarish.
Je voudrais remercier djibril pour les différents kits qu'il développe ainsi que pour sa réactivité, facilitant notamment la rédaction d'articles sur les systèmes Linux.
Je voudrais remercier claudeLELOUP pour sa relecture orthographique.
Enfin je voudrais remercier tous ceux qui auront eu le courage de lire mon article.