C'est le pont JNI le plus avancé concernant le moteur de simulation physique ODE (Open Dynamics Engine) développé en C++.

Développé initialement par William Denis, auteur de la spécification XODE (XML ODE data interchange format) dont l'implémentation de référence du parseur est livrée avec ODEJava, aussi pilier de l'équipe de développement du projet Xith3D. Ce projet de scène 3D a ensuite privilégié le portage intégral en java d'ODE en intégrant en priorité dans sa couche d'abstraction physique XPAL (Xith3D Physic Abstraction Layer) le projet JOODE (Java Object Oriented Dynamics Engine). Ce dernier semble ne plus être développé. Il existe un nouveau portage 100% java ode4j (moteur physique en java, rendu des démonstrations OpenGL en natif via lwjgl).

JME (Java Monkey Engine) est un projet concurrent de Xith3D centré sur la production de jeux et qui offre aussi une couche d'abstraction physique jME Physics basée sur ODEJava et JOODE sauf qu'elle privilégie ODEJava. Du reste c'est l'équipe de jME Physics qui contribue maintenant à ODEJava.

Pour conclure ODEJava est encore à l'heure actuelle (janvier 2009) la meilleure solution pour intégrer un moteur physique éprouvé en java. Il faut cependant noter l'existence du projet PAL (Physics Abstraction Layer) qui est une couche d'abstraction plus riche en C++ car permettant d'intégrer notamment les moteurs Bullet (open source), PhysX et ODE. Cependant, il n'existe pas de pont JNI pour PAL.

De la dilution des énergies dans de multiples projets plus ou moins concurrents, il résulte qu'il est de plus en plus difficile de récupérer les dernières distributions d'ODEJava. Aussi je les fournis. Tout pont JNI nécessite une partie binaire spécifique pour chaque plateforme et une partie java (bytecode) indépendante de la plateforme. La distribution comporte les binaires pour Windows, Linux et Mac OS X. Depuis que JME développe ODEJava (v 0.3.*), il est scindé en 2 parties : l'API de bas niveau utilisée par JME et l'API de haut niveau avec le parseur XODE, un peu délaissée.

  • Téléchargement de la javadoc de ODEJava >0.3 (pont jni : API de bas niveau)
  • Téléchargement de la javadoc de ODEJava >0.3 (API de haut niveau)
  • Téléchargement de la distribution ODEJava-jni-0.3.4.zip qui est la version courante (octobre 2009). Nécessite la bibliothèque OpenMali (Open Math Library), présente dans la distribution. Je décris la manière de récupérer les sources de la distribution courante d'ODEJava et la façon de construire la bibliothèque native pour windows odejava.dll avec ODE ainsi que les bibliothèques java odejava-jni.jar et odejava.jar. Je donne un petit exemple d'utilisation d'une sphère (balle) qui tombe et qui n'utilise que l'API de bas niveau et pour le rendu la bibliothèque JOGL (Java OpenGL), implémentation de référence pour la JSR-231 (Java Bindings for OpenGL) qui permet d'accéder à la plupart des fonctionnalités OpenGL disponibles en C, à l'exception notable des appels GLUT (OpenGL Utility Toolkit) relatifs au système de fenêtrage car redondant pour java avec l'AWT (Abstract Window Toolkit) ou avec Swing, et avec SWT (Standard Widget Toolkit), bibliothèque de composants graphiques libres .
  • Téléchargement de la distribution ODEJava-jME-Physics-0.3.2.zip utilisé par la version 2 de JME. Nécessite la bibliothèque OpenMali (Open Math Library), présente dans la distribution.
  • Téléchargement de la distribution ODEJava-jME-Physics-0.3.1.zip utilisé par la version 1 de JME. Nécessite la bibliothèque OpenMali (Open Math Library), présente dans la distribution.
  • Téléchargement de la distribution ODEJava-Xith3D-0.2.4.zip qui est utilisé notamment dans l'extension physique de Xj3D. C'est la version la plus facile à trouver qui date de 2004. Nécessite la bibliothèque Vecmath de Java3D, présente dans la distribution. Version ne permettant pas d'exploiter les cylindres qu'ils soient plats ou capsules. Voici un exemple d'utilisation avec son interface de prédilection d'alors, Xith3D.