Java 3D est de retour [Java 3D is back]

Java 3D with JOGL 2.0, first success
Français English
Sommaire :

Summary :


Introduction


Introduction

Si vous m’aviez dit l’an dernier que j’allais initier le portage de Java 3D vers JOGL 2.0, je ne vous aurais certainement pas cru. C’est pourtant ce qui s’est passé le 10 février 2012. Dès janvier 2008, Sun Microsystems se concentrait sur Prism, le scénographe de JavaFX, au détriment de Java 3D. Depuis, ce dernier n’a pas évolué, il n’a reçu que des mises à jour correctives relativement mineures. Ce portage (que j’ai fait bénévolement) ne m’a pris que quelques heures et c’est désormais maintenu par un salarié de la société Ausenco Sandwell. If you had told me last year that I would initiate the porting of Java 3D to JOGL 2.0, I wouldn’t certainly have believed you. This is what happened February, 10th, 2012. In January 2008, Sun Microsystems focused on Prism, JavaFX scenegraph, to the detriment of Java 3D. Since, it has not changed, it has only received relatively minor corrective updates. This port (that I did for free) only took me a few hours and is now maintained by an employee of the company Ausenco Sandwell.

Nouveautés


News

Harvey, le salarié en question, a réussi à rendre Java 3D plus stable bien avant mon intervention, il a également réparé le rendu offscreen, il a remis d’aplomb la procédure de compilation et de création des JARs, il a supprimé beaucoup de code mort et il a retiré quelques fonctionnalités peu utilisées et potentiellement boguées (notamment le support du langage Cg pour les shaders Nvidia). Java 3D disposait de trois systèmes de rendu basés sur des APIs différentes pour l’accélération graphique, deux d’entre eux s’appuyaient sur OpenGL et le dernier s’appuyait sur Direct3D. Le système de rendu utilisé par défaut dépendait de la plateforme et pouvait être sélectionné avec la propriété "j3d.rend". Cela rendait l’installation assez compliquée (il fallait prévoir plusieurs cas de figures en configurant le classpath et le library path de telle sorte que les différents systèmes puissent fonctionner) et la maintenance assez lourde pour une plus-value très discutable. Seul le système de rendu basé sur JOGL 2.0 a été conservé. Ainsi, il n’y a plus aucun risque de conflit avec Direct3D (pensez quand même à désactiver le pipeline Java 2D basé sur Direct3D si nécessaire), il est possible de mélanger du code de rendu OpenGL (avec ou sans JOGL 2.0) à du code de rendu Java 3D. Harvey, the employee in question, succeeded in driving Java 3D more stable long before my intervention, he also repaired the offscreen rendering, he righted the procedure for compiling and creating JARs, it deleted a lot of dead code and removed some rarely used and potentially buggy features (including support of Nvidia Cg language for shaders). Java 3D had three rendering systems based on different APIs for graphics acceleration, two of them were based on OpenGL and the last was based on Direct3D. The rendering system used by default depended on the platform and could be selected with the property "j3d.rend". This made the installation quite complicated (we had to plan several scenarios by setting the classpath and library path so that different systems can work) and the maintenance quite heavy for an highly questionable gain. Only the rendering system based on JOGL 2.0 has been retained. Thus, there is no risk of conflict with Direct3D (still think about disabling the Java 2D pipeline based on Direct3D if necessary), it is possible to mix OpenGL rendering code (with or without JOGL 2.0) to the Java 3D rendering code.

Installation


Installation

L’installation est très simple. Vous avez besoin des JARs suivants : The installation is very simple. You need the following JARs:
  • j3dcore.jar
  • j3dutils.jar
  • vecmath.jar
  • jogl-all.jar
  • jogl-all-natives-linux-amd64.jar
  • jogl-all-natives-linux-i586.jar
  • jogl-all-natives-macosx-universal.jar
  • jogl-all-natives-windows-amd64.jar
  • jogl-all-natives-windows-i586.jar
  • joal.jar
  • joal-natives-linux-amd64.jar
  • joal-natives-linux-i586.jar
  • joal-natives-macosx-universal.jar
  • joal-natives-windows-amd64.jar
  • joal-natives-windows-i586.jar
  • gluegen-rt.jar
  • gluegen-rt-natives-linux-amd64.jar
  • gluegen-rt-natives-linux-i586.jar
  • gluegen-rt-natives-macosx-universal.jar
  • gluegen-rt-natives-windows-amd64.jar
  • gluegen-rt-natives-windows-i586.jar
Les JARs de Java 3D sont ici : The JARs for Java 3D are here:
Les JARs de JOGL, JOAL et GlueGen sont ici. The JARs for JOGL, JOAL and GlueGen are here.
Il vous suffit de copier tous les JARs ci-dessus dans le même répertoire (de sorte que JogAmp sache où trouver les bibliothèques natives pendant l’extraction et le chargement automatiques) et de mettre ceux dont le nom ne contient pas le mot "natives" dans le classpath. Vous pouvez lancer votre programme ainsi en ligne de commande (remplacez ":" par ";" sous Windows, remplacez [1] par le nom de votre JAR et [2] par le nom complet de la classe principale lequel contient les paquetages et les sous-paquetages) : Simply copy all JARs above into the same directory (so that JogAmp knows where to find the native libraries during the automatic extraction and loading) and put those whose name does not contain the word "natives" into the classpath. You can run your program as well in command line (replace ":" by ";" under Windows, replace [1] by the name of your JAR and [2] by the full name of the main class which contains the packages and subpackages):
java -cp gluegen-rt.jar:j3dcore.jar:j3dutils.jar:joal.jar:jogl-all.jar:vecmath.jar:[1].jar [2]
N.B : Ne copiez jamais des JARs dans les répertoires de la machine virtuelle Java (notamment jre/lib/ext) ou dans les répertoires d’extension du système (/Library/Java/Extensions/, /System/Library/Java/Extensions/ et /System/Library/Frameworks sous Mac OS X) afin d’éviter tout conflit entre la version que vous utilisez et une version chargée en priorité installée dans un de ces répertoires. En cas de problème, vérifiez bien que votre système d’exploitation ne dispose pas déjà d’une version obsolète de Java 3D (cela est assez courant sur certains versions de Mac OS X) et si tel est le cas, désinstallez la au moins le temps de faire vos développements (il se peut que de vieilles applications basées sur Java 3D en aient besoin). N.B: Don’t copy any JARs into the directories of the Java virtual machine (especially jre/lib/ext) or into the directories of system extensions (/Library/Java/Extensions/, /System/Library/Java/Extensions/ and /System/Library/Frameworks under Mac OS X) in order to avoid any conflict between the version that you use and a version that is installed in one of these directories loaded in priority. Check whether your operating system doesn’t already have an obsolete version of Java 3D (which is quite common under some versions of Mac OS X) if you have any trouble and if it’s the case, uninstall it at least the time to do your development (some old applications based on Java 3D may need it).
Sous Eclipse 3.8, faites un clic droit sur le projet puis allez dans Properties -> Java Build Path -> Libraries. Cliquez sur "Add JARs…" et sélectionnez les JARs ci-dessus (à l’exception de ceux dont le nom contient le mot "natives"). Sous Netbeans, dans l’onglet "Project", sélectionnez le noeud "Libraries" -> "Add JAR/Folder" et sélectionnez les JARs ci-dessus (à l’exception de ceux dont le nom contient le mot "natives"). In Eclipse 3.8, right clic on the project and go to Properties -> Java Build Path -> Libraries. Click on "Add JARs…" and select all JARs above (except those whose name contains the word "natives"). In Netbeans, in the "Project" tab, select the "Libraries" node -> "Add JAR/Folder" and select all JARs above (except those whose name contains the word "natives").
Je vous conseille de bien récupérer tous les JARs, y compris ceux qui ne sont pas nécessaires pour l’exécution de votre programme sur votre système d’exploitation car ils vous seront utiles pour le déployer sur Internet sous forme d’applet ou sous forme d’application Java Web Start. I advise you to get all JARs, including those that are not necessary for the execution of your program on your operating system because they will be useful to deploy it on Internet as an applet or as a Java Web Start application.

Conclusion


Conclusion

Cette version 1.6.0 rend Java 3D plus stable et plus facile à utiliser. En s’appuyant sur JOGL 2.0, Java 3D se débarrasse d’une limitation et redevient une solution logicielle pérenne telle quelle. Néanmoins, il reste très dépendant d’AWT ce qui l’empêchera de fonctionner sous Android, ses problèmes de performances subsistent et son manque de fonctionnalités modernes le place loin derrière les scénographes existants, notamment Ardor3D, JMonkeyEngine et 3DzzD. Il reste intéressant essentiellement pour les développeurs disposant de gros volumes de code source basé sur cette API. Il dispose toujours de nombreux tutoriels sur Internet et comme l’API publique n’a pas changé, le passage de Java 3D 1.5.2 à Java 3D 1.6.0 ne nécessite aucune modification du code, j’ai fait le test avec Arabian Flights de Mike Prosser. Xith3D est le scénographe le plus proche de Java 3D mais il semble au point mort depuis quelques années. Si Java 3D est suffisant pour vos projets, n’hésitez pas à vous en servir en toute connaissance de cause. En revanche, si vous souhaitez faire de l’animation squelettale, prenez plutôt Ardor3D. Je vous expliquerai prochainement comment porter vos programmes de Java 3D à Ardor3D. La visualisation 3D en Java ne se résume pas à Java 3D. This version 1.6.0 drives Java 3D more stable and easier to use. Java 3D gets rid of a limitation thanks to JOGL 2.0 and becomes a durable software solution as is. Nevertheless, it is very dependent on AWT which will prevent from running under Android, its performance problems remain and its lack of modern features puts it behind the existing scenegraphs, including Ardor3D, JMonkeyEngine and 3DzzD. It is interesting mainly for developers with large volumes of source code based on this API. It still has many tutorials on the Internet and as the public API has not changed, the transition from Java 3D 1.5.2 to Java 3D 1.6.0 does not require any code changes, I checked that with Arabian Flights by Mike Prosser. Xith3D is the most similar scenegraph from Java 3D, but it seems at a standstill in recent years. If Java 3D is sufficient for your projects, do not hesitate to use it knowingly. However, if you want to use skeletal animation, rather choose Ardor3D. I’ll explain soon how to port your Java 3D programs to Ardor3D. 3D visualization in Java is not just Java 3D.
P.S : Vous pouvez demander de l’aide sur le forum ou bien sur Github. P.S: You can ask for help on the forum or on Github.
Licence Creative Commons
La photo de cet article est mise à disposition selon les termes de la Licence Creative Commons Attribution – Pas d’Utilisation Commerciale – Pas de Modification 3.0 non transposé
Creative Commons License
The photo of this article is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License
Licence Creative Commons
Cet article est mis à disposition selon les termes de la Licence Creative Commons Attribution – Pas d'Utilisation Commerciale – Partage à l'Identique 3.0 non transposé
Creative Commons License
This article is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
Auteur : Julien Gouesse Author: Julien Gouesse

À propos de gouessej

Ingénieur en informatique, militant politique d'extrême-gauche, développeur de logiciels libres multi-plateformes. Engineer in computer science, far left-wing political activist, developer of free open source cross-platform softwares.
Cette entrée, publiée dans Jeux vidéo, est taguée , , , . Bookmarquez ce permalien.

3 réponses à Java 3D est de retour [Java 3D is back]

  1. Ping : zafena development » The JogAmp community now maintains JOGL and Java3D

  2. Ping : Jogl

  3. Ping : zafena development » [RELEASE] JogAmp 2.0.2; JOGL10y celebration & SIGGRAPH 2013 BOF

Les commentaires sont fermés.